I want to fit my ode model to experimental data and derive parameters using lsqcurevfit and fmincon
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
% Experimental data
t2=[6 12 18 36 48];
t20=[ 6 12 18 24];
nfe20=[ 3.83 3.88 6.27 5.25 ];
nfe2=[ 1.57 2.87 3.9 5.16 4.25];
t=0:1:48;
% ODE equation
ode_eqn = @(x, t) integrate_a(x, t) .* t; %ODE equation to fit
x0 = [1 1 11]; % Initial guess for the parameters
% Least squares curve fitting using lsqcurvefit
x_fit1 = lsqcurvefit(ode_eqn, x0, t2, nfe2);
disp("Fitted parameters using lsqcurvefit:")
disp(x_fit1)
% Nonlinear programming using fmincon
options = optimoptions('fmincon', 'Algorithm', 'interior-point');
x_fit1_constrained = fmincon(@(x) sum((ode_eqn(x, t2) - nfe2).^2), x0,[],[],[],[],[0 0 0],[10 10 3],[],options);
disp("Fitted parameters using fmincon:")
disp(x_fit1_constrained)
% Plotting results
t_fit1 = 0:1:48; % Time points for plotting fitted curve
figure;
plot(t2, nfe2, 'bo', 'MarkerSize', 8, 'LineWidth', 1.5); % Plot experimental data
hold on;
plot(t_fit1, ode_eqn(x_fit1, t_fit1), 'r-', 'LineWidth', 2); % Plot fitted curve using lsqcurvefit
plot(t_fit1, ode_eqn(x_fit1_constrained, t_fit1), 'g--', 'LineWidth', 2); % Plot fitted curve using fmincon
hold off;
legend('Experimental Data', 'lsqcurvefit', 'fmincon');
xlabel('Time');
ylabel('Data');
title('Fitting Experimental Data to ODE Equation');
%%
%{
function [a,b] = nonlcon(x)
f=1:1:6;
a=[];
b=[];
inf=0.9;
for t=0:1:48
if t > x(3)
a = a + (f*x(1) - a.*x(2));
end
end
inf=a-1;
end
%}
function a_int = integrate_a(x, t)
f=[99 38 9 .015 0.06];
inf=0.9;
a_int = zeros;
inf = 0.9;
for i = 1:numel(t)
if t(i) >= x(3)
inf(i) = inf(i-1)+ (f.*x(1) - inf(i-1).*x(2));
end
end
end
0 Kommentare
Antworten (2)
Alan Weiss
am 14 Jun. 2023
There are some examples in the documentation of fitting ODE parameters to data:
Discretized Optimal Trajectory, Problem-Based (maybe not relevant, but might be)
If these don't help, feel free to ask again.
Alan Weiss
MATLAB mathematical toolbox documentation
0 Kommentare
Siehe auch
Kategorien
Mehr zu Nonlinear Least Squares (Curve Fitting) finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!