In letzter Zeit höre ich oft den Begriff SIR-Modell im Zusammenhang mit dem Koronavirus. Es ist bekannt, dass das SIR-Modell gut in die Grafik infizierter Personen wie Influenza passt, und es ist auch nützlich für die Gegenmaßnahmen gegen dieses Koronavirus.
Ich nehme zufällig an verwandten Kursen teil, es können also ungefähr 100 Biere sein, aber ich möchte es leicht zusammenfassen, damit auch Schüler der Mittelstufe es verstehen können. Lassen Sie uns abschließend mit Python-Code simulieren.
Das SIR-Modell ist ein mathematisches Modell, das die Ausbreitung von Infektionskrankheiten ausdrückt. S steht für nicht infizierte Person, I steht für infizierte Person (derzeit infizierte Person, nicht die Gesamtzahl der infizierten Personen) und R steht für wiederhergestellte Person. Im SIR-Modell ist der Wiederhersteller immun und wird nicht mehr infiziert. Es wird durch die folgenden drei Formeln vorsichtig ausgedrückt, ohne ein kleines Produkt zu verwenden.
\Delta S = - \beta S I
\Delta I = \beta S I - \nu I
\Delta R = \nu I
Wenn Sie sich mit Chemie auskennen, stellen Sie sich diese als Reaktionsgeschwindigkeitsgleichung vor (das Gesetz der Massenwirkung). $ \ Delta S $, $ \ Delta I $ und $ \ Delta R $ repräsentieren Änderungen in $ S $, $ I $ bzw. $ R $. Insbesondere, wie viel $ S $, $ I $ und $ R $ morgen zunehmen oder abnehmen werden. Zum Beispiel wird $ S $ von morgen $ S + \ Delta S $ sein. $ \ Beta $ ist die Infektionsrate und $ \ nu $ ist die Genesungsrate, die von der Art Ihrer Krankheit abhängt. $ 1 / \ nu $ ist ungefähr die Anzahl der Tage, die für die Wiederherstellung benötigt werden.
Fügen wir nun beide Seiten dieser drei Formeln hinzu.
\Delta S + \Delta I + \Delta R = 0
Sie können sehen, dass es ist. $ \ Delta S + \ Delta I + \ Delta R $ repräsentiert die Summe von $ S $, $ I $ und $ R $, die morgen zunehmen oder abnehmen wird. Das ist $ 0 $, was bedeutet, dass dieses Modell kein seltsames Modell ist, das die Gesamtbevölkerung erhöht oder verringert. Sagen wir diesmal $ S + I + R = 1 $. Wenn beispielsweise $ I = 0,1 $ ist, bedeutet dies, dass 10% der Einwohner des Landes $ I $ (infizierte Person) sind.
Als nächstes betrachten wir die Bedeutung der Formel. Die erste Formel war wie folgt.
\Delta S = - \beta S I
Diese Formel zeigt, dass morgen S (nicht infiziert) um $ \ beta S I $ reduziert wird. Abnehmen bedeutet, sich in eine infizierte Person zu verwandeln. Der Grund, warum der Betrag der Reduzierung durch das Produkt von $ S $ und $ I $ bestimmt wird, kann leicht durch Ersetzen eines bestimmten Werts vorgestellt werden.
In einem Land, in dem jeder infiziert ist und keine nicht infizierten Personen vorhanden sind, ist $ S = 0 $, also $ SI = 0
Zusammenfassend können wir sehen, dass diese Formel ausdrückt, dass das Produkt aus der Begegnungsrate und der Infektionsrate $ \ beta $ neu infiziert ist. Als nächstes schauen wir uns die dritte Formel an.
\Delta R = \nu I
Diese Formel bedeutet, dass sich so viele Menschen wie die Anzahl der Infizierten multipliziert mit der Wiederherstellungsrate erholen. Es scheint ein wenig seltsam, dass die Anzahl der Wiederherstellungen vom Prozentsatz der infizierten Personen abhängt, aber das SIR-Modell geht davon aus. Schauen wir uns zum Schluss die zweite Formel an.
\Delta I = \beta S I - \nu I
Wenn man die Bedeutung der ersten und dritten Formel betrachtet, kann man sehen, dass die Anzahl der infizierten Personen um die Anzahl der (neu infizierten Personen) - (neu wiederhergestellten Personen) zunimmt. Wenn (neu infizierte Person) <(neu erholte Person), wird dies negativ, sodass wir sehen können, dass die Anzahl der infizierten Personen abnimmt.
Ich werde es in meiner Freizeit schreiben
Ich werde die Erklärung in meiner Freizeit schreiben
sir.py
import matplotlib.pyplot as plt
import numpy as np
beta = 0.5
nu = 0.3
period = 100
def next_state(s, i, r):
delta_s = - beta*s*i
delta_i = beta*s*i - nu*i
s = s + delta_s
i = i + delta_i
if s < 0:
s = 0
if i > 1:
i = 1
r = 1 - s - i
return s, i, r
def main():
results = []
i = 0.01
r = 0
s = 1 - i - r
l_s = [s]
l_i = [i]
l_r = [r]
results.append([s,i,r])
r0 = beta*s/nu
print(s, i, r)
for t in range(period):
s, i, r = next_state(s, i, r)
results.append([s,i,r])
l_s.append(s)
l_i.append(i)
l_r.append(r)
print("R0:{}".format(r0))
plt.figure()
plt.title("R0:{}".format(format(r0,".3f")))
plt.xlabel('Time')
plt.ylabel('Rate')
x = np.linspace(0, 100, period+1)
plt.plot(x, l_s, label="S")
plt.plot(x, l_i, label="I")
plt.plot(x, l_r, label="R")
plt.legend()
plt.show()
main()
Ausführungsergebnis
Recommended Posts