WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

SIR Problem lösen mit 4- Stufen Runge- Kutta

 

marcella
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 15.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2014, 15:35     Titel: SIR Problem lösen mit 4- Stufen Runge- Kutta
  Antworten mit Zitat      
Hallo ihr Lieben,

ich möchte gerne das SIR Epidemiemodell mit dem 4- stufigen Runge Kutta Verfahren lösen. Dabei geht es um folgende Differenzialgleichungen:

(I) d/dt u(t) = - Ru(t)v(t)
(II) d/dt v(t) = Ru(t)v(t)- v(t)
(III) d/dt w(t) = v(t)

R ist dabei eine Konstante. Zudem soll gelten u(t)+v(t)+w(t) = 1.

Ich hab das Verfahren nun zunächst mit ODE45 gelöst. Klappt wunderbar. Leider sollen wir nun das Runge Kutta Verfahren selber programmieren und das mag nicht so 100% klappen. Die Gleichungen u(t) und v(t) werden richtig geplottet, nur w(t) wird im Vergleich zu meiner ersten Lösung (mit der vordefinierten ODE45 Funktion) nicht richtig dagestellt (der Steigung ist etwas zu steil und somit der letzte Wert zu hoch, so dass u(t)+v(t)+w(t)=1 nicht mehr erfüllt ist).

Hier meine erste (richtige) Lösung:

%SIR Modell_ ODE45

figure();
r=1.6;
[t,Y]=ode45(@(t,y)[-1*r*y(1)*y(2); (r*y(1)-1)*y(2);y(2)],[0,25],[0.99;0.01;0]);
plot(t,Y)
title ('Krankheitsverlauf')
xlabel ('t');
ylabel ('Anteil der Population');
legend ('Gesund', 'Krank', 'Immun');

%Ende Code 1

Hier meine fehlerhafte zweite Lösung:

%4stufiges Runge Kutta Verfahren zum Lösen der Differenzialgleichung

h= 0.5; % Schrittweite
R= 1.6; % Reproduktionsrate, konstant
x= 0:h:25; % Simulation für 25 Tage
y = zeros(1,length(x));
z = zeros (1,length(x));
w = zeros (1,length(x));
y(1) = 0.99;
z(1) = 0.01;
w(1) = 0.0;
F_xyz = @(t,u,v) -R*u*v; %Differenzialgleichungssystem
G_xyz = @(t,u,v) R*u*v-v;
H_xz = @(t,v) v
for i=1:(length(x)-1) %Runge Kutta Verfahren
k_1 = F_xyz(x(i),y(i),z(i));
l_1 = G_xyz (x(i),y(i),z(i));
m_1 = H_xz (x(i),z(i));
k_2 = F_xyz((x(i)+0.5*h),(y(i)+0.5*h*k_1), (z(i)+0.5*h*l_1));
l_2 = G_xyz ((x(i)+0.5*h),(y(i)+0.5*h*k_1),(z(i)+0.5*h*l_1));
m_2 = H_xz ((x(i)+0.5*h), (z(i)+0.5*h*m_1));
k_3 = F_xyz((x(i)+0.5*h),(y(i)+0.5*h*k_2),(z(i)+0.5*h*l_2));
l_3 = G_xyz ((x(i)+0.5*h),(y(i)+0.5*h*k_2),(z(i)+0.5*h*l_2));
m_3 = H_xz ((x(i)+0.5*h), (z(i)+0.5*h*m_2));
k_4 = F_xyz((x(i)+h),(y(i)+h*k_3),(z(i)+h*l_3));
l_4 = G_xyz ((x(i)+h),(y(i)+h*k_3),(z(i)+h*l_3));
m_4 = H_xz ((x(i)+h), (z(i)+h*m_3));
y(i+1) = y(i) + (1/6)*h*(k_1+2*k_2+2*k_3+k_4);
z(i+1) = z(i) + (1/6)*h*(l_1+2*l_2+2*l_3+l_4);
w(i+1) = w(i) + (1/6)*h*(m_1+2*m_2+2*m_3+m_4);
end
plot (x,y,x,z,x,w)
title('Krankheitsverlauf');
xlabel('Tage');
ylabel('Population');
legend('Gesund', 'Infiziert','Immun');
%Ende Code 2

Vielleicht sieht jemand den Fehler Smile Ich wäre euch super, super dankbar!!

Liebe Grüße,

Marcella

p.s. die beiden plots hänge ich an Smile

Bildrichtig.png
 Beschreibung:
so sollte es aussehen

Download
 Dateiname:  Bildrichtig.png
 Dateigröße:  5.25 KB
 Heruntergeladen:  311 mal
Bildfalsch.png
 Beschreibung:
hier die falsche Trajektorie für w(t)

Download
 Dateiname:  Bildfalsch.png
 Dateigröße:  5.23 KB
 Heruntergeladen:  290 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.11.2014, 17:28     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich das richtig sehe, ist es nicht falsch, sondern nur ungenau.
Dein RK hat ja im Gegensatz zu ode45 keine Schrittweitensteuerung. Du musst die Schrittweite also klein genug wählen. Bei h = 0.05 sieht es gut aus.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
marcella
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 15.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2014, 17:37     Titel:
  Antworten mit Zitat      
Lieber Harald!

Oh man Very Happy super, ja so sieht es gut aus.

Vielen, vielen Dank!

Marcella
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.