Fitting differential equation (ode45) to data using lsqcurvefit
12 views (last 30 days)
Show older comments
I'm trying to fit an ode to data. For now I only have data I generated, so I know if I'm fitting it correctly. I found another thread about fitting ode to data using lsqcurvefit and followed that but couldn't get my code to give me the correct parameters.
Here is my code:
a = 1.5;
sa = .8;
n = .3;
% generates the data I will fit to
func = @(t,x) = ((1-x)*sa*(x^a)) - (x*(1-sa)*((1-x)^a));
tspan = 1:40;
[t1, x1] = @ode45(func, tspan, n);
% trying to find a and sa values that will fit the data generated
x0 = [.3 .3];
v = lsqcurvefit(@ASModelODE, x0, t1, x1);
function s = ASModelODE(v,t)
% ode:
% dx/dt = (1-x)*sa*x^a - x*(1-sa)*(1-x)^a
% variables:
% x
% parameters:
% v(1) = sa, v(2) = a;
x0 = [0.1 0.1];
diffeq = @(t,x) (1-x).*v(1).*x.^v(2) - x.*(1-v(1)).*(1-x).^v(2);
[T, Sv] = ode45(diffeq, t, x0)
s = Sv(:,1);
end
when I run this I get errors like "Complex sparse QR is not yet available" and it also gives me imaginary fit parameters most of the times.
What am I doing wrong?
0 Comments
See Also
Categories
Find more on Matrix Computations 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!