**Hinweis! Dieser Artikel enthält nicht mehr Informationen als ich versucht habe. ** ** **
Als Reaktion auf die jüngste COVID 19-Situation denke ich, dass über verschiedene mathematische Modelle von Infektionskrankheiten gesprochen wurde, aber lassen Sie uns dies mit Python-Odeint lösen und es so visualisieren, wie es mit Matplotlib ist. Es klingt unangenehm, aber Sie sollten keine Gefühle zu COVID 19 ausdrücken, wenn Sie etwas in diesem Artikel richtig implementiert haben.
Nehmen wir also an, das am einfachsten zu lösende SIR-Modell ist
\begin{align}
\frac{\mathrm{d} S}{\mathrm{d} t} & = - \beta I S\\
\frac{\mathrm{d} I}{\mathrm{d} t} & = \beta I S - \gamma I\\
\frac{\mathrm{d} R}{\mathrm{d} t} & = \gamma I
\end{align}
Ich werde es als belassen. $ \ Beta $ ist die Infektionsrate (/ (Person x Stunden)), die Anzahl der nicht übertragenen Personen, die pro Zeiteinheit pro kranker Person infiziert werden können, $ \ gamma $ ist die Heilungsrate ( / Stunde), das ist die Umkehrung der Zeit, die zum Heilen benötigt wird. $ S $ ist die Anzahl der Personen, die nicht infiziert wurden und nicht infizieren können. $ I $ ist die Anzahl der Personen, die infiziert sind und die Fähigkeit haben, andere zu infizieren. $ R $ ist Isolation, Heilung, Tod usw. Die Anzahl der Personen, die infiziert wurden oder die Fähigkeit verloren haben, andere zu infizieren.
Python code Da es problematisch ist, habe ich einen soliden Code ohne Erklärung eingefügt.
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button
def solve(value, t, foi, rr):
# fio = force of infection (beta)
# rr = recovery rate
S, I, R = value
dSdt = - foi * I * S
dIdt = foi * I * S - rr * I
dRdt = rr * I
return [dSdt, dIdt, dRdt]
span = 100
t = np.linspace(0, span, 256)
initial_value = [0.9, 0.1, 0] # initial values for S, I, R
solution = odeint(solve, initial_value, t, args = (0.5, 0.5))
fig, ax = plt.subplots(figsize=(12, 6))
plt.xlim(0, span)
plt.ylim(0, 1)
plt.subplots_adjust(bottom = 0.2)
data_S, = plt.plot(t, solution[:, 0], "blue", label = "Susceptible")
data_I, = plt.plot(t, solution[:, 1], "red", label = "Infectious")
data_R, = plt.plot(t, solution[:, 2], "orange", label = "Removed")
plt.legend(loc = "best")
rr_slider = Slider(plt.axes([0.2, 0.02, 0.65, 0.02]), "recovery rate", 0, 1, valinit = 0.5, valstep = 0.1)
foi_slider = Slider(plt.axes([0.2, 0.05, 0.65, 0.02]), "force of inf.", 0, 1, valinit = 0.5, valstep = 0.1)
def update(val):
rr = rr_slider.val
foi = foi_slider.val
solution = odeint(solve, initial_value, t, args=(foi, rr))
data_S.set_ydata(solution[:, 0])
data_I.set_ydata(solution[:, 1])
data_R.set_ydata(solution[:, 2])
fig.canvas.draw_idle()
rr_slider.on_changed(update)
foi_slider.on_changed(update)
plt.show()
Nun, spiel es. Wenn Sie die Differentialgleichung lösen möchten, während Sie die Parameter wellig machen, zögern Sie bitte nicht, uns zu kontaktieren.
Recommended Posts