Custom fitting using equation from differential function

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일

0 개 추천

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.

카테고리

Community Treasure Hunt

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

Start Hunting!

Translated by