Problem using lscurvefit - 'Initial point is a local minimum'

23 vues (au cours des 30 derniers jours)
henry kagey
henry kagey le 9 Mar 2018
Commenté : henry kagey le 15 Mar 2018
I am attempting to fit a complicated function using lscurvefit. The function I am attempting to fit looks like this:
xdata./(
(3*x(1)./(1.28*xdata.^0.46).^2)
+ (((4.178*(x(2)-0.418*x(1)))./(1.28*xdata.^0.46)).*(1-xdata).^(1/3))
+ (6.806 * (x(2) - 1.588 * x(1)) * (1-xdata).^(2/3))
)
where xdata is on the order of 1e-3 and the output of the function is on the order of 1e-7 to 1e-6, always increasing. The constants I am attempting to solve for, x(1) and x(2), will be between 0 and 60, so my initial vector x0 is [30 30].
The code I am using looks like this:
options = optimset('TolX',1e-6, 'TolFun',1e-6);
lb = [0 0];
ub = [99 99];
fcn = @(x,xdata) [the above function]
x0 = [30 30];
xsolve = lsqcurvefit(fcn,x0,eps,kdim,lb,ub,options);
I am told no matter what my initial guess is that my function is already at an optimum. I am assuming that there is something happening with the scaling in this problem, but I am having a hard time seeing where it is, as the solution vector does appear to be well scaled for a solution. I have tried changing TolX and TolFun to see if I could find a meaningful solution, but to no avail.
If anyone can offer some advice, it would be much appreciated.
Thank you

Réponses (1)

Torsten
Torsten le 9 Mar 2018
Try to fit 1/kdim against the inverse of your function f.
After rearranging you'll see that 1/f takes the form
1/f = f1(eps)*x(1)+f2(eps)*x(2).
To get optimum x(1) and x(2), just do
xsol = [f1(eps) f2(eps)]\(1./kdim)
At least xsol can be used as a good starting guess for a nonlinear fit.
Best wishes
Torsten.
  1 commentaire
henry kagey
henry kagey le 15 Mar 2018
Thank you for the reply, Torsten. I followed your advice to invert and separate, and was able to find an optimum for the constants x(1) and x(2).
I appreciate that you took the time to offer up a potential solution. I am curious about what you saw that made you think to reframe the problem: was it the nature of inputs to lscurvefit? Or was it something else?
Thanks again!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Get Started with MATLAB dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by