Question exercice 3 P20

Question exercice 3 P20

- Loechner Antoine の投稿
返信数: 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.

Loechner Antoine への返信

Re: Question exercice 3 P20

- 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];
Roussel Benjamin への返信

Re: Question exercice 3 P20

- 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)) ;