S-I-R Modell¶
Das S-I-R Modell ist ein einfaches Modell aus der mathematischen Epidemiologie um die Dynamik einer Infektion (und eventuell Epidemie) zu beschreiben.
Das Modell beschreibt drei Klassen der Bevölkerung:
- Infizierbare (Susceptibles)
- Infizierte (Infected)
- Geheilte (Removed)
Die Dynamik wird durch ein System von gekoppelten gewöhnlichen Differentialgleichungen beschrieben
Wir importieren zunächst einige nützliche python Erweiterungen:
#!/usr/bin/python
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
Die Anfangsbedingungen werden gesetzt:
S0, I0, R0 = 999, 1, 0
und ebenso die Modellparameter alpha und beta:
alpha, beta = 4e-4, 2e-2
Die rechten Seiten der Differentialgleichungen werden als eine vektor-wertige Funktion geschrieben:
def deriv(u, t, alpha, beta):
S, I, R = u
dSdt = -alpha * S * I
dIdt = alpha * S * I - beta * I
dRdt = beta * I
return dSdt, dIdt, dRdt
dann setzen wird auch die Anfangsbedingungen als Vektor der Werte S0, I0 und R0:
y0 = S0, I0, R0
wir möchten die Lösung zu diskrete Zeitschritte bestimmen und legen dafür ein Zeitintervall und Zeitschritte fest:
T = np.linspace(0, 160, 160)
Anschließend lösen wir das S-I-R Modells zu den diskreten Zeitpunkten:
ret = odeint(deriv, y0, T, args=(alpha, beta))
S, I, R = ret.T
Mit Hilfe der matplotlib Erweiterung können wir das Ergebnis visualisieren:
plots = plt.plot(T, S, 'b', alpha=0.5, lw=2, label='Susceptible') \
+ plt.plot(T, I, 'r', alpha=0.5, lw=2, label='Infected') \
+ plt.plot(T, R, 'g', alpha=0.5, lw=2, label='Recovered with immunity')
plt.xlabel('Zeit [Tage]')
plt.ylabel('Anzahl')
plt.legend(handles=plots)
plt.show()
Download 02-sir.py
.