0
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));
 
 
 
Diese Frage melden
gefragt

Student, Punkte: 28

 

Wofür stehen denn die Parameter?   ─   cauchy 09.06.2023 um 17:30
Kommentar schreiben
1 Antwort
0
Ich verstehe es so: Geg. sind Messwerte meas als Vektor der Länge length(x).
Gesucht sind nun die drei Parameter so, dass die num. Lsg des Dglsystems (des SIR-Modells) möglichst gut trifft.
Die zu minimierende Funktion myFunc ist also
myFunc(r,a,i):=Vektor der num. Lsg des Modells mit r,a,i  minus meas.
Darin ist also der Aufruf eines Dglsolvers enthalten - was vermutlich in vorigen Aufgabenteilen diskutiert/implementiert wurde.
Der LM-Algorithmus löst also in jedem Iterationsschritt ein Dglsystem und der Aufruf wäre lsqnonlin('myFunc', start).
Diese Antwort melden
geantwortet

Lehrer/Professor, Punkte: 38.93K

 

Kommentar schreiben