Hi, wie kann ich mit dem Befehl
lsqnonlin in Matlab, die Parameter a und r meiner Differentialgleichungen bestimmen? Ich habe bereits die Differentialgleichungen aufstellen können und Messdaten sind gegeben, aber verstehe nicht genau wie ich das in Kombination angeben muss. Matlab Dokumentation hilft mir nicht weiter. Muss ich zunächst meine Startwerte für mein Befehl lsqnonlin benutzen?
Meine Aufgabe lautet wie folgt: (SIR-Model)
Verwenden Sie lsqnonlin mit dem Levenberg-Marquardt-Algorithmus, um die Parameter r und a sowie I0 zu den Messdaten in meas für die Anzahl der Infizierten (= N ∙ I(t)) % zu bestimmen.
Arbeiten Sie mit N = 83000000, I0 = meas(1)/N, R0 = 0, S0 = 1-I0.
Verwenden Sie als Startwerte a0 = 1/14 (d.h. ca. 14 Tage bis zur Gesundung), r0 = 2a0/S0, I0 = meas(1)/N.
Mein Code:
clear all;
%Daten Laden
load('activeCases');
load ('meas.mat');
%%Parameter
N = 83000000;%Anzahl Menschen Gesamtbevölkerung (N = S+I+R)
I0 = meas(1)/N; % Infectives (= Anteil Infizierte, welche die Krankheit weitergeben können)
R0= 0; %Removed (= Anteil Personen, welche die Krankheit nicht weitergeben können: Immune bzw. Verstorbene)
S0=1-I0; % Susceptibles (= Anteil Gesunde)
%Startwerte, Parameter, initial guess
a0 = 1/14; %d.h. ca. 14 Tage bis zur Gesundung
r0 = 2*a0/S0;
t = 0:0.1:40; %Zeitvektor in Tage
%hier meine Differentialgleichungen:
%dS/dt = - aSI
%dI/dt = aSI-rI
%dR/dt = rI
% define y = [S dy/dt = [dS/dt = [-aSI = [-a*y(1)*y(2)% I ----_> dI/dt aSI-rI a*y(1)*y(2) - r*y(2)% R] dR/dt] rI] r*y(2)]
%dydt = @(t,y) [(-a*y(1)*y(2));
%(a*y(1)*y(2) - r*y(2));
%(r*y(2))];
start = [a0; r0; I0]; %Startwerte als Vektor
options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt');
phi = lsqnonlin('myFunc', start , [], [], options, meas(:,1));