Problem in Curve fitting
Ältere Kommentare anzeigen
Hi,
I have a sets of data [x,y] that I want to fit with a function F(v,x) where v contains six free parameters.
x=[70,75,80,83,90,100]; y=[1,1,0.97,0.95,0.9,0];
I found the best fitted curve by cftool for this data set (polynomial degree 5):

but the result is different when I use lsqcurvefit.
v0=[0,0,0,0,0,0];
fun = @(v,x)v(1)*x.^5 + v(2)*x.^4 + v(3)*x.^3 + v(4)*x.^2 + v(5)*x + v(6);
x=[70,75,80,83,90,100];y=[1,1,0.97,0.95,0.9,0];
v=lsqcurvefit(fun,v0,x,y);
times = linspace(x(1),x(end));
plot(x,y,'ko',times,fun(v,times),'b-')
this is the result:

It seems lsqurvefit did not fitted the curve to the points.
any idea that why it does not work for me?
Akzeptierte Antwort
Weitere Antworten (2)
Walter Roberson
am 20 Mai 2021
fun = @(v,x)v(1)*x.^5 + v(2)*x.^4 + v(3)*x.^3 + v(4)*x.^2 + v(5)*2 + v(6);
^^^^^^
Should be
v(5)*x
6 Kommentare
maryam amiri
am 20 Mai 2021
Bearbeitet: maryam amiri
am 20 Mai 2021
Walter Roberson
am 20 Mai 2021
I see what you mean.
In R2021a (at least), lsqcurvefit() is quite sensitive to initial conditions.
I suggest using polyfit(), as that produces the correct answer (to within round-off)
maryam amiri
am 20 Mai 2021
In R2021a (at least), lsqcurvefit() is quite sensitive to initial conditions.
Possibly, but note that the sensitivity can't have anything to do with local minima. It is a convex problem and, in theory, lsqcurvefit should converge to the solution from any initial point.
Walter Roberson
am 20 Mai 2021
However, it stops when it thinks the residue is good enough, or if it gets too very small step sizes.
It is a convex problem
Your v = -0.0381 -0.0852 -0.0060 0.0310 -0.0643 0.9500 has two sign changes, so the function itself is not convex.
However, it stops when it thinks the residue is good enough, or if it gets too very small step sizes.
Yes, the ill-conditioning of the problem does cause one of these lsqcurvefit stopping criteria to be triggered prematurely, and where it stops will indeed depend on the initial point.
Your v = -0.0381 -0.0852 -0.0060 0.0310 -0.0643 0.9500 has two sign changes, so the function itself is not convex.
Yes, the polynomial being fitted is surely not convex as a function of x as we can also see from the plots. However, the least squares objective is convex as a function of v, which is why, in theory, lsqcurvefit should be globally convergent for this problem.
Girijashankar Sahoo
am 20 Mai 2021
0 Stimmen
check the again, I get your result with same code

3 Kommentare
maryam amiri
am 20 Mai 2021
Bearbeitet: maryam amiri
am 20 Mai 2021
Girijashankar Sahoo
am 20 Mai 2021
v =
-0.0000 0.0000 -0.0019 0.0778 -19.4167 -9.7083
maryam amiri
am 20 Mai 2021
Kategorien
Mehr zu Get Started with Curve Fitting Toolbox finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


