How do I fit two equations that explain two parts of a curve?
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi,my equations are: y(t)={(a/b)*(1-exp(-b(x-x_start)),for x_start <= x < x_end %equ1 and {c*exp(-b(x-xend)),for x > x_end %equ2
Here I do not know a,b and c. The idea is that since both equations have b in common, I would like to know how fitting these equations I can get one single value for b. I already fitted these equations individually, but I obtained two values of b, which are different from each fit.
1 Commento
John D'Errico
il 17 Feb 2015
I predict that your next question will be why is my curvefit not continuous at the break point? I.e., at x_end, the pair of functions will not be continuous.
Risposta accettata
Sean de Wolski
il 17 Feb 2015
Break the data into two pieces and do the curve fit
xlow = x(x<x_end);
ylow = y*x<x_end);
xhigh = x(x>x_end); % Note you have nothing for x==x_end
yhigh = y(x>x_end);
Now do the curve fit - either with the Curve Fitting App, lsqcurvefit or fitnlm.
7 Commenti
Torsten
il 23 Feb 2015
You programmed it as
function call
xdata=[...];
ydata=[...];
xstart=...;
xend=...;
p0=[1 1 1];
p = lsqnonlin(@(p)myfun(xdata,ydata,xstart,xend,p),p0);
function F = myfun(xdata,ydata,xstart,xend,p)
for i=1:length(xdata)
if (xdata(i) >= xstart) && (xdata(i) < xend)
F(i) = ydata(i)-(p(1)/p(2))*(1-exp(-p(2)(xdata(i)-xstart));
else
F(i)=ydata(i)-(p(3)*exp(-p(2)(xdata(i)-xend));
end
end
?
Best wishes
Torsten.
Più risposte (1)
Joep
il 17 Feb 2015
This is very simple solution which works in some cases one thing you need to noticed is the 1-based indexing of matlab.
a=10; b=20; c=-1; d=-3;
for x=1:a
t(x)=x;
y(x)=c*x;
end
for x=a:b
t(x)=t;
y(x)=d*x.^2;
end
figure
plot(t,y)
Vedere anche
Categorie
Scopri di più su Fit Postprocessing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!