lsqnonlin with jacobian problem

2 visualizaciones (últimos 30 días)
Mus Bohr
Mus Bohr el 19 de Jul. de 2012
TE=2:5:5*20;
S(1,:)=104*exp(-TE/10);
options=optimset('Algorithm','levenberg-marquardt','Display','off','Jacobian ','on','Tolfun',1e-6 );
P0=[59 30];
P=lsqnonlin(@test,P0,[],[],options,S,TE)
function [F,J]=test(P,S,TE)
Ft=P(1)*exp(-TE/P(2));
F=S-Ft;
if nargout >1
J(:,1)=exp(-TE/P(2));
J(:,2)=P(1)*TE.*exp(-TE/P(2))/(P(2)^2);
end
  1 comentario
Walter Roberson
Walter Roberson el 19 de Jul. de 2012
Are you encountering an error message? If so, what message and where?

Iniciar sesión para comentar.

Respuestas (5)

Walter Roberson
Walter Roberson el 19 de Jul. de 2012

Mus Bohr
Mus Bohr el 19 de Jul. de 2012
Thank you for your response.
My example contains only two variables (parameters). The result of the fitting is exact when I turn Jacobian 'off'. Otherwise, the result is completely erroneous.
Best,
MB
  1 comentario
Walter Roberson
Walter Roberson el 19 de Jul. de 2012
Editada: Walter Roberson el 19 de Jul. de 2012
P=lsqnonlin(@test,P0,[],[],options,S,TE)
  1. @test
  2. P0
  3. []
  4. []
  5. options
  6. S
  7. TE
That is 7 parameters. lsqnonlin() does not accept anything after "options".

Iniciar sesión para comentar.


Mus Bohr
Mus Bohr el 19 de Jul. de 2012
Thank you for this precision, but lsqnonlin function accept parameters after "options".
Indeed, I found the solution to my problem. Actually, my scripts is correct, but I should to swap Ft and S (in 'test' function). In other words, F=Ft-S instead of F=S-Ft.
Anyway, thank you so much for you time.
Warm regards,
MB.
  2 comentarios
Walter Roberson
Walter Roberson el 19 de Jul. de 2012
parameters after "options" has no defined result, and so is subject to change at any time, without notice. We repeatedly get Questions here from people who have attempted to pass extra parameters in a similar manner only to have the function fail because of it. Is there a point in relying on accidental behavior when a simple and well-documented adjustment is available? http://www.mathworks.com/help/toolbox/optim/ug/brhkghv-7.html
Mus Bohr
Mus Bohr el 19 de Jul. de 2012
I take note. Again thank you.
Best,
MB

Iniciar sesión para comentar.


Mus Bohr
Mus Bohr el 19 de Jul. de 2012
or provide Jacobian with the negative sign.

Star Strider
Star Strider el 19 de Jul. de 2012
Swapping S and Ft so that F = Ft - S will likely solve your problem. In the objective function you gave it, the lsqnonlin function uses the Jacobian of F in its calculation, not the Jacobian of Ft, and while they may look the same, the derivatives of F = S - Ft will be the negative of the ones you posted, while the derivatives of F = Ft - S will have the same signs as those you posted.
This is likely the reason that with the ‘Jacobian’ option ‘off’, your function converged.
  1 comentario
Mus Bohr
Mus Bohr el 19 de Jul. de 2012
Thank you for these precisions.
Best,
MB

Iniciar sesión para comentar.

Categorías

Más información sobre Interpolation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by