Das neue Koronavirus ist weltweit ausgebrochen, und die Weltgesundheitsorganisation (WHO) hat am 30. Januar einen Notfall ausgerufen. Es wurde lange versucht, Ausbrüche durch Simulation von Infektionskrankheiten wie Coronavirus mithilfe mathematischer Modelle vorherzusagen. In diesem Artikel werden wir das grundlegendste SIR-Modell unter den mathematischen Modellen von Epidemien mit Infektionskrankheiten vorstellen und numerische Simulationen mit Python durchführen.
Das SIR-Modell ist eine klassische Modellgleichung, die den kurzfristigen epidemischen Prozess von Infektionskrankheiten deterministisch beschreibt [1]. Der Name des Modells stammt von "Anfällig", "Infiziert", "Wiederhergestellt" oder "Nach einer Infektion entfernt". Dieses Modell wurde 1927 von W. O. Kermack und A. G. McKendrick vorgeschlagen. [2] Dieses Modell kann durch die folgende gewöhnliche Differentialgleichung dargestellt werden.
\begin{align}
\frac{dS(t)}{dt}&=-\beta S(t)I(t) \\
\frac{dI(t)}{dt}&=\beta S(t)I(t)-\gamma I(t) \\
\frac{dR(t)}{dt}&=-\gamma I(t)
\end{align}
Hier ist die Bedeutung jeder Variablen wie folgt.
Da das SIR-Modell eine simultane normale Differentialgleichung ist, ist es schwierig, eine allgemeine Lösung zu finden. Daher verwenden wir in diesem Artikel die Rungecutta-Methode, die häufig in numerischen Berechnungen verwendet wird. Die Anfangsbedingungen der Simulation sind wie folgt (* Die hier verwendeten Werte werden angemessen bestimmt, und es gibt keine besondere Grundlage dafür).
main.py
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
def main():
#Einstellung jedes Parameters
N = 1000000
alpha=0.5/N
beta=0.07
dt=0.1
init_SIR_value=[N-100, 100, 0] #Anfangsbedingungen einstellen
times = np.arange(0.0, 100, dt) #Periodeneinstellung
results = odeint(SIR, init_SIR_value, times, args=(alpha,beta)) #Berechnet mit Odeint
#Visualisierung
plt.title("SIR Model")
plt.plot(times[::10],results[::10,0]/N, color=(0.0,1,0.0), linewidth=1.0, label='S')
plt.plot(times[::10],results[::10,1]/N, color=(1.0,0,0.0), linewidth=1.0, label='I')
plt.plot(times[::10],results[::10,2]/N, color=(0.0,0,1.0), linewidth=1.0, label='R')
plt.xlim(0,100)
plt.legend()
plt.xlabel('day')
plt.ylabel('value')
plt.grid(True)
plt.show()
def SIR(v,t,alpha,beta):
return [-alpha*v[0]*v[1], alpha*v[0]*v[1]-beta*v[1], beta*v[1]]
if __name__ == '__main__':
main()
Wenn Sie das obige Programm ausführen, erhalten Sie die folgenden Ergebnisse.
Aus der Grafik ist ersichtlich, dass die Anzahl der Infizierten nach Erreichen eines bestimmten Höchstwerts abnimmt.
In diesem Artikel haben wir das SIR-Modell vorgestellt, das eines der mathematischen Modelle für Infektionskrankheitsepidemien ist, und den Übergang von Infektionskrankheitsepidemien durch Simulation durchgeführt. Im Gegensatz zu Infektionskrankheiten wie Influenza hat das neue Coronavirus eine lange Latenzzeit, so dass es angeblich nicht geeignet ist, dieses Modell anzuwenden. Daher wurde für dieses Modell auch ein mathematisches Modell namens SEIR-Modell vorgeschlagen, das die Latenzzeit berücksichtigt. Ich werde dieses Modell dieses Mal nicht vorstellen, aber ich werde es in einem anderen Artikel vorstellen, wenn ich eine Chance habe.
[1] SIR-Modell -Wikipedia- [2] A Contribution to the Mathematical Theory of Epidemics