Info

This question is closed. Reopen it to edit or answer.

How are initial values chosen for either lsqcurvefit or nlinfit functions?

1 view (last 30 days)
I want to fit my experimental data to a theoretical model which contains an exponential. I've attached a copy of the code I'm using. I've tried various x0 matrix values, but the same error message keeps popping up:
Caused by: Failure in initial objective function evaluation. LSQCURVEFIT cannot continue.

Answers (3)

Torsten
Torsten on 19 Sep 2018
There must be some mathematical operation within your objective function that gives Inf, NaN or something similar (e.g. division by zero, log or sqrt of a negative number, exponentiation of a negative number ...).
Best wishes
Torsten.

Ken Mathai
Ken Mathai on 19 Sep 2018
Edited: Walter Roberson on 19 Sep 2018
So if I have the following:
xdata=cranialStrain
ydata=cranialStress
fun=@(x,xdata)(x(1)*xdata+x(2)*xdata*xdata);
x0 = [0.1 0.1 0];
x = lsqcurvefit(fun,x0,xdata,ydata)
I should be careful that my data does not include negative numbers for ydata, as that would cause issues for the model equation?
  3 Comments
Ken Mathai
Ken Mathai on 19 Sep 2018
hmm. I'm not sure why you say this is a linear parameter estimation problem. Isn't the fact that the xdata is being squared make the model a quadratic?
Also, I made the proposed change to xdata in the multiplication and I reformatted the axes to not include negative numbers. This allowed me to run the code without error!
Torsten
Torsten on 19 Sep 2018
Linear means: The equation is linear in the parameters.
It is irrelevant how "xdata" enters the equation.
Thus in your case x(1) and x(2) are simply given by
x = [xdata xdata.^2]\ydata
where xdata and ydata are your respective column vectors.
Best wishes
Torsten.

Ken Mathai
Ken Mathai on 19 Sep 2018
Ah, ok. But what other way is there to fit the data to my model equation? I also do not have the cftool box.

Community Treasure Hunt

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

Start Hunting!