フィルターのクリア

Fit NonLinearLeastSquares to data and constrain curve to pass through point (0,1)

4 ビュー (過去 30 日間)
Zachary Nunn
Zachary Nunn 2019 年 8 月 15 日
編集済み: Matt J 2019 年 8 月 19 日
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 件のコメント
Torsten
Torsten 2019 年 8 月 19 日
Use
y = a*exp(-x/b) + c*exp(-x/d) + (1-(a+c))
as equation.

サインインしてコメントする。

採用された回答

Jyotsna Talluri
Jyotsna Talluri 2019 年 8 月 19 日
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

その他の回答 (1 件)

Matt J
Matt J 2019 年 8 月 19 日
編集済み: Matt J 2019 年 8 月 19 日
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);

カテゴリ

Help Center および File ExchangeGet Started with Curve Fitting Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by