Custom fitting using equation from differential function

8 ビュー (過去 30 日間)
Sabella Huang
Sabella Huang 2022 年 6 月 1 日
回答済み: Sabella Huang 2022 年 6 月 3 日
Hello guys,
I have some data that need to be fit by the equation from differential equation solver. I want to obtain parameter from syms A and B as an answer. Here is my code that I try to solve.
syms t y(t) A B
eqn_ass = diff(y,t) == A-B*y;
cond_ass = y(0) == 0;
R_ass = dsolve(eqn_ass,cond_ass); % I want to use equation from here as my fitting equation to obtain parameter A and B

採用された回答

Bjorn Gustavsson
Bjorn Gustavsson 2022 年 6 月 1 日
編集済み: Bjorn Gustavsson 2022 年 6 月 1 日
Use matlabFunction to make a function out of the symbolic solution, then fit that one numerically to your data:
R_a_fcn = matlabFunction(R_ass);
err_fcn = @(par,t,y,fcn) sum((y - fcn(par(1),par(2),t)).^2); % error-function
res_fcn = @(par,t,y,fcn) (y - fcn(par(1),par(2),t));
% mock up test-example
t = 0:31;
y = 12*(1-exp(-t/11));
% Fit with fminsearch:
PAR = fminsearch(@(par) err_fcn(par,t,y,R_a_fcn),[1 1]);
% Fit with lsqnonlin:
PAR2 = lsqnonlin(@(par) res_fcn(par,t,y,R_a_fcn),[1 1]);
% Fit with lsqcurvefit:
PAR3 = lsqcurvefit(@(par,t) R_a_fcn(par(1),par(2),t),[1 1],t,y);
% Compare:
plot(t,y)
hold on
plot(t,R_a_fcn(PAR(1),PAR(2),t),'--')
plot(t,R_a_fcn(PAR2(1),PAR2(2),t),'-.')
plot(t,R_a_fcn(PAR3(1),PAR3(2),t),':')
HTH

その他の回答 (2 件)

Alan Stevens
Alan Stevens 2022 年 6 月 1 日
You equation has the analytical solution y = (A/B)*(1-exp(-B*t)). Use fminsearch to fit the parameters, or the curve fitting toolbox if you have it.

Sabella Huang
Sabella Huang 2022 年 6 月 3 日
its work... thx for your help

カテゴリ

Help Center および File ExchangeCalculus についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by