数学建模中的疾病传播模型
发布时间
阅读量:
阅读量
#疯狂传播
import numpy as np
import scipy.integrate as spi
import matplotlib.pyplot as plt
N = 10000 # N为人群总数
beta = 0.25 # β为传染率系数
gamma = 0 # gamma为恢复率系数
I_0 = 1 # I_0为感染者的初始人数
S_0 = N - I_0 # S_0为易感染者的初始人数
T = 150 # T为传播时间
INI = (S_0, I_0) # INI为初始状态下的数组
def funcSI(inivalue, _):
Y = np.zeros(2)
X = inivalue
Y[0] = -(beta * X[0] * X[1]) / N + gamma * X[1] # 易感个体变化
Y[1] = (beta * X[0] * X[1]) / N - gamma * X[1] # 感染个体变化
return Y
T_range = np.arange(0, T + 1)
RES = spi.odeint(funcSI, INI, T_range)
plt.plot(RES[:, 0], color='darkblue', label='Susceptible', marker='.')
plt.plot(RES[:, 1], color='red', label='Infection', marker='.')
plt.title('SI Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

有恢复率
import numpy as np
import scipy.integrate as spi
import matplotlib.pyplot as plt
N = 10000 # N为人群总数
beta = 0.25 # β为传染率系数
gamma = 0.05 # gamma为恢复率系数
I_0 = 1 # I_0为感染者的初始人数
S_0 = N - I_0 # S_0为易感染者的初始人数
T = 150 # T为传播时间
INI = (S_0, I_0) # INI为初始状态下的数组
def funcSIS(inivalue, _):
Y = np.zeros(2)
X = inivalue
Y[0] = -(beta * X[0]) / N * X[1] + gamma * X[1] # 易感个体变化
Y[1] = (beta * X[0] * X[1]) / N - gamma * X[1] # 感染个体变化
return Y
T_range = np.arange(0, T + 1)
RES = spi.odeint(funcSIS, INI, T_range)
plt.plot(RES[:, 0], color='darkblue', label='Susceptible', marker='.')
plt.plot(RES[:, 1], color='red', label='Infection', marker='.')
plt.title('SIS Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

有抗体的干活
import numpy as np
import scipy.integrate as spi
import matplotlib.pyplot as plt
N = 10000 # N为人群总数
beta = 0.25 # β为传染率系数
gamma = 0.05 # gamma为恢复率系数
I_0 = 1 # I_0为感染者的初始人数
R_0 = 0 # R_0为治愈者的初始人数
S_0 = N - I_0 - R_0 # S_0为易感染者的初始人数
T = 150 # T为传播时间
INI = (S_0, I_0, R_0) # INI为初始状态下的数组
def funcSIR(inivalue, _):
Y = np.zeros(3)
X = inivalue
Y[0] = -(beta * X[0] * X[1]) / N # 易感个体变化
Y[1] = (beta * X[0] * X[1]) / N - gamma * X[1] # 感染个体变化
Y[2] = gamma * X[1] # 治愈个体变化
return Y
T_range = np.arange(0, T + 1)
RES = spi.odeint(funcSIR, INI, T_range)
plt.plot(RES[:, 0], color='darkblue', label='Susceptible', marker='.')
plt.plot(RES[:, 1], color='red', label='Infection', marker='.')
plt.plot(RES[:, 2], color='green', label='Recovery', marker='.')
plt.title('SIR Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

import numpy as np
import scipy.integrate as spi
import matplotlib.pyplot as plt
N = 10000 # N为人群总数
beta = 0.25 # β为传染率系数
gamma = 0.05 # gamma为恢复率系数
Ts = 7 # Ts为抗体持续时间
I_0 = 1 # I_0为感染者的初始人数
R_0 = 0 # R_0为治愈者的初始人数
S_0 = N - I_0 - R_0 # S_0为易感染者的初始人数
T = 150 # T为传播时间
INI = (S_0, I_0, R_0) # INI为初始状态下的数组
def funcSIRS(inivalue, _):
Y = np.zeros(3)
X = inivalue
Y[0] = -(beta * X[0] * X[1]) / N + X[2] / Ts # 易感个体变化
Y[1] = (beta * X[0] * X[1]) / N - gamma * X[1] # 感染个体变化
Y[2] = gamma * X[1] - X[2] / Ts # 治愈个体变化
return Y
T_range = np.arange(0, T + 1)
RES = spi.odeint(funcSIRS, INI, T_range)
plt.plot(RES[:, 0], color='darkblue', label='Susceptible', marker='.')
plt.plot(RES[:, 1], color='red', label='Infection', marker='.')
plt.plot(RES[:, 2], color='green', label='Recovery', marker='.')
plt.title('SIRS Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

import numpy as np
import scipy.integrate as spi
import matplotlib.pyplot as plt
N = 10000 # N为人群总数
beta = 0.6 # β为传染率系数
gamma = 0.1 # gamma为恢复率系数
Te = 14 # Te为疾病潜伏期
I_0 = 1 # I_0为感染者的初始人数
E_0 = 0 # E_0为潜伏者的初始人数
R_0 = 0 # R_0为治愈者的初始人数
S_0 = N - I_0 - R_0 - E_0 # S_0为易感染者的初始人数
T = 150 # T为传播时间
INI = (S_0, E_0, I_0, R_0) # INI为初始状态下的数组
def funcSEIR(inivalue, _):
Y = np.zeros(4)
X = inivalue
Y[0] = -(beta * X[0] * X[2]) / N # 易感个体变化
Y[1] = (beta * X[0] * X[2] / N - X[1] / Te) # 潜伏个体变化
Y[2] = X[1] / Te - gamma * X[2] # 感染个体变化
Y[3] = gamma * X[2] # 治愈个体变化
return Y
T_range = np.arange(0, T + 1)
RES = spi.odeint(funcSEIR, INI, T_range)
plt.plot(RES[:, 0], color='darkblue', label='Susceptible', marker='.')
plt.plot(RES[:, 1], color='orange', label='Exposed', marker='.')
plt.plot(RES[:, 2], color='red', label='Infection', marker='.')
plt.plot(RES[:, 3], color='green', label='Recovery', marker='.')
plt.title('SETR Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

import numpy as np
import scipy.integrate as spi
import matplotlib.pyplot as plt
N = 10000 # N为人群总数
beta = 0.6 # β为传染率系数
gamma = 0.1 # gamma为恢复率系数
Ts = 7 # Ts为抗体持续时间
Te = 14 # Te为疾病潜伏期
I_0 = 1 # I_0为感染者的初始人数
E_0 = 0 # E_0为潜伏者的初始人数
R_0 = 0 # R_0为治愈者的初始人数
S_0 = N - I_0 - R_0 - E_0 # S_0为易感染者的初始人数
T = 150 # T为传播时间
INI = (S_0, E_0, I_0, R_0) # INI为初始状态下的数组
def funcSEIRS(inivalue, _):
Y = np.zeros(4)
X = inivalue
Y[0] = -(beta * X[0] * X[2]) / N + X[3] / Ts # 易感个体变化
Y[1] = (beta * X[0] * X[2] / N - X[1] / Te) # 潜伏个体变化
Y[2] = X[1] / Te - gamma * X[2] # 感染个体变化
Y[3] = gamma * X[2] - X[3] / Ts # 治愈个体变化
return Y
T_range = np.arange(0, T + 1)
RES = spi.odeint(funcSEIRS, INI, T_range)
plt.plot(RES[:, 0], color='darkblue', label='Susceptible', marker='.')
plt.plot(RES[:, 1], color='orange', label='Exposed', marker='.')
plt.plot(RES[:, 2], color='red', label='Infection', marker='.')
plt.plot(RES[:, 3], color='green', label='Recovery', marker='.')
plt.title('SETRS Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

全部评论 (0)
还没有任何评论哟~
