Question exercice 3 P20

Question exercice 3 P20

par Loechner Antoine,
Nombre de réponses : 3

Bonjour,
J'essaye de faire l'exercice 3 du final P20, mais je ne tombe pas sur le résultat attendu.
Voici mon code :

data = [ 0. 1.0140272
1. 0.3539748
2. -0.2049914
3. -0.2787802
4. -0.1863459
5. -0.095575
6. -0.0918984
7. -0.0146713
8. -0.0536165
9. 0.0238807
10. -0.0903517
0. 0.9910492
1. 0.4189767
2. -0.1106721
3. -0.2660769
4. -0.1800888
5. -0.0920536
6. -0.099392
7. -0.0225214
8. 0.0098232
9. -0.0368559
10. -0.0123621
0. 0.9901843
1. 0.3558912
2. -0.099514
3. -0.2344031
4. -0.1836291
5. -0.0982159
6. -0.1151818
7. -0.0462578
8. -0.0138438
9. -0.0109252
10. 0.0142542];


function r = resid(x,n)
a=x(1);
b=x(2);
c=x(3);
r = (a+b*t+c*t.^2).*exp(-t) - y;
endfunction

clf
t=data(:,1)
y=data(:,2)
plot(t,y,"o")

x0 = [1;1;1];
x = lsqrsolve(x0, resid, length(y));

a=x(1);
b=x(2);
c=x(3);
plot(t,(a+b*t+c*t.^2).*exp(-t));

Et voici la courbe que j'obtiens :

J'ai pensé à une erreur de détermination de la jacobienne par la fonction lsqrsolve. J'ai donc calculé la dérivée du vecteur résidu et l'ai ajouté dans l'appel de lsqrsolve, mais l'erreur suivante s'affiche : Nombre d'arguments d'entrée erroné.

function J=fjac(x) 
    a=x(1);
    b=x(2);
    c=x(3);
    J = (-a+b-b*t+2*c*t-c*t.^2).*exp(-t);
endfunction

x = lsqrsolve(x0, resid, length(y), fjac);

Serait-il possible de me fournir une aide afin que je puisse résoudre mon problème s'il vous plait ?

Merci d'avance,

Cordialement.

En réponse à Loechner Antoine

Re: Question exercice 3 P20

par Roussel Benjamin,
Salut :)

Si tu écris data dans l'ordre ça marche normalement, tiens pour t'éviter les copier-coller) :

data = [ 0. 1.0140272
0. 0.9910492
0. 0.9901843
1. 0.3558912
1. 0.4189767
1. 0.3539748
2. -0.2049914
2. -0.1106721
2. -0.099514
3. -0.2787802
3. -0.2660769
3. -0.2344031
4. -0.1863459
4. -0.1800888
4. -0.1836291
5. -0.095575
5. -0.0982159
5. -0.0920536
6. -0.099392
6. -0.0918984
6. -0.1151818
7. -0.0225214
7. -0.0146713
7. -0.0462578
8. -0.0536165
8. 0.0098232
8. -0.0138438
9. -0.0368559
9. -0.0109252
9. 0.0238807
10. -0.0903517
10. -0.0123621
10. 0.0142542];
En réponse à Roussel Benjamin

Re: Question exercice 3 P20

par Chanet Maxime,
Salut
Sinon, tu peux créer un deuxième vecteur de temps pout tracer la courbe avec.
Ca te permet aussi de rajouter plus de points pour avoir une courbe lisse.

t2=linspace(0,10,1000);
plot(t ,y ,'o' ,t2, (a+b*t2+c*t2^2).*exp(-t2)) ;