Fit NonLinearLeastSquares to data and constrain curve to pass through point (0,1)
1 view (last 30 days)
Show older comments
I have data I need to fit to an equation, which I can do, but I want the equation to pass through point (0,1).
The equation is an exponential y = a*exp(-x/b)+ c*exp(-x/d)+ e
Currently, this is my code:
f3 = fitoptions('Method','NonlinearLeastSquares','Startpoint',[1,100,1,100,1])
newrelax = fittype('q*exp(-x/r)+ s*exp(-x/t)+u','options',f3);
[h,gof] = fit(timeR,stressR,newrelax)
plot(h,timeR,stressR)
Thank you,
-Zach
1 Comment
Accepted Answer
Jyotsna Talluri
on 19 Aug 2019
You can use a “lsqlin” function from optimization toolbox.
t=coeffvalues(h);
C=[exp(-x/t(2)) exp(-x/t(4)) ones(size(x))];
D=y;
A = []; % No inequality constraint
B= []; % No inequality constraint
%Set the specified points in C and D to find equality constraints Aeq, Beq..By substituting (0,1) they turned out to be
Aeq =[1 1 1];Beq=[1];
l=lsqlin(C,D,A,B,Aeq,Beq); %generates coefficients of the curve fitted passing through a specified point
Plot(timeR,C*l);
Refer to the below link
0 Comments
More Answers (1)
Matt J
on 19 Aug 2019
Edited: Matt J
on 19 Aug 2019
This answer incorporates Torsten's advice, but I also think you should re-formulate the model to make the exponential terms asymmetric. Otherwise, the solver cannot decide which exponential term belongs to q and which belongs to s.
f3 = fitoptions('Method','NonlinearLeastSquares',...
'Startpoint',[1,100,1,100,1],'Lower',[-inf,-inf,-inf,0]);
newrelax = fittype('q*exp(-x/r)+ s*exp(-x/(r+d))+(1-(q+s))','options',f3);
0 Comments
See Also
Categories
Find more on Get Started with Curve Fitting Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!