Custom fitting using equation from differential function
8 views (last 30 days)
Show older comments
Sabella Huang
on 1 Jun 2022
Answered: Sabella Huang
on 3 Jun 2022
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 Comments
Accepted Answer
Bjorn Gustavsson
on 1 Jun 2022
Edited: Bjorn Gustavsson
on 1 Jun 2022
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 Comments
More Answers (2)
Alan Stevens
on 1 Jun 2022
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 Comments
See Also
Categories
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!