El modelo SIR con nacimientos y muertes es un sistema de tres ecuaciones diferenciales no lineales en el que se modelo el comportamiento de un virus en un conjunto de personas N en el inicio del modelo respectivo.
$${\Large \begin{align*} \frac{dS}{dt} &= -aSI + c(N - S) \hspace{1.2cm},\hspace{0.2cm} S(0) = S_{0} \\ \frac{dI}{dt} &= aSI - bI - cI \hspace{1.2cm},\hspace{0.2cm} I(0) = I_{0} \\ \frac{dR}{dt} &= bI - cR \hspace{1.2cm},\hspace{0.2cm} R(0) = R_{0} \end{align*} }$$
Donde:
S = Personas Susceptibles
I = Personas Infectadas
R = Personas Recuperadas
t = tiempo
N = $S_{0} + I_{0} + R_{0}$
a = Tasa de transmisión de la enfermedad
b = Tasa de recuperación de las personas infectadas
c = Tasa de muerte de las personas infectadas
El sistema de ecuaciones diferenciales anterior no tiene solución analítica. Por consiguiente se necesita del análisis numérico para poder resolverse.
Antes de crear el código fuente es necesario que se importan algunas librerías correspondientes para compilar este código.
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
Ahora iniciaremos el código respectivamente
Código Fuente del Modelo SIR con Nacimientos y Muertes
def epid(t0, tn, x0, y0, z0, n, a, b, c):
""" t0 = es el tiempo inicial
tn 0 es el tiempo final
n es el número de pasos
[x0, y0, z0] es la condicion inicial, x0 es mucho mayor
que y0 y z0 comunmente es 0
[a,b,c] son las constantes del modelo Sir con nacimientos
y muertes, cuando c = 0 el modelo es Sir sin nacimientos
y muertes """
f1 = lambda t,x,y,z: -a*x*y + c*(x0 + y0 + z0 - x)
f2 = lambda t,x,y,z: a*x*y - b*y - c*y
f3 = lambda t,x,y,z: b*y - c*z
f4 = lambda t,u,v,w: -a*u*v
f5 = lambda t,u,v,w: a*u*v - b*v
f6 = lambda t,u,v,w: b*v
t = np.linspace(t0, tn, n+1)
x = np.zeros(n+1)
y = np.zeros(n+1)
z = np.zeros(n+1)
u = np.zeros(n+1)
v = np.zeros(n+1)
w = np.zeros(n+1)
x[0] = x0
y[0] = y0
z[0] = z0
u[0] = x0
v[0] = y0
w[0] = z0
h = (tn-t0)/n
for i in range(1,n+1):
x[i] = x[i-1] + h*f1(t[i-1], x[i-1], y[i-1], z[i-1])
y[i] = y[i-1] + h*f2(t[i-1], x[i-1], y[i-1], z[i-1])
z[i] = z[i-1] + h*f3(t[i-1], x[i-1], y[i-1], z[i-1])
u[i] = u[i-1] + h*f4(t[i-1], u[i-1], v[i-1], w[i-1])
v[i] = v[i-1] + h*f5(t[i-1], u[i-1], v[i-1], w[i-1])
w[i] = w[i-1] + h*f6(t[i-1], u[i-1], v[i-1], w[i-1])
fig, ((ax1, ax2)) = plt.subplots(1,2)
fig.set_size_inches(16,8)
ax1.plot(t, x, lw = 3, color = 'r', label = "Susceptibles")
ax1.plot(t, y, lw = 3, color = 'b', label = "Infectados")
ax1.plot(t, z, lw = 3, color = 'g', label = "Recuperados")
ax1.set_xlabel('Tiempo', size = 20)
ax1.set_title("SIR con Nacimientos y Muertes", size=20)
ax1.legend(fontsize = 15)
ax1.grid()
ax2.plot(t, u, lw = 3, color = 'r', label = "Susceptibles")
ax2.plot(t, v, lw = 3, color = 'b', label = "Infectados")
ax2.plot(t, w, lw = 3, color = 'g', label = "Recuperados")
ax2.set_xlabel('Tiempo', size = 20)
ax2.set_title("SIR sin Nacimientos y Muertes", size=20)
ax2.legend(fontsize = 15)
ax2.grid()
plt.suptitle('Modelos Epidemiológicos', fontsize=25, size=30)
plt.tight_layout()
plt.show()
return epid
Aplicación del código fuente
$${\Large \begin{align*} \frac{dS}{dt} &= -(0.0022)SI + 0.05(1100 - S) \hspace{1.2cm},\hspace{0.2cm} S(0) = 1000 \\ \frac{dI}{dt} &= (0.0022)SI - (0.4477)I - (0.05)I \hspace{1.2cm},\hspace{0.2cm} I(0) = 100 \\ \frac{dR}{dt} &= (0.4477)I - (0.05)R \hspace{1.2cm},\hspace{0.2cm} R(0) = 0 \end{align*} }$$
epid(0, 30, 1000, 100, 0, 10000, 0.0022, 0.4477, 0.05) |
Comentarios
Publicar un comentario