Custom fitting using equation from differential function
3 ビュー (過去 30 日間)
表示 古いコメント
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
0 件のコメント
採用された回答
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
0 件のコメント
その他の回答 (2 件)
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.
0 件のコメント
参考
カテゴリ
Find more on Interpolation 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!