How do I fit two equations that explain two parts of a curve?
    7 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    mdjupin
 el 17 de Feb. de 2015
  
    
    
    
    
    Comentada: mdjupin
 el 24 de Feb. de 2015
            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 comentario
  John D'Errico
      
      
 el 17 de Feb. de 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.
Respuesta aceptada
  Sean de Wolski
      
      
 el 17 de Feb. de 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 comentarios
  Torsten
      
      
 el 23 de Feb. de 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.
Más respuestas (1)
  Joep
      
 el 17 de Feb. de 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)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




