使用Python实现SIR模型,模拟流行病传播过程
SIR模型是一种经典的传染病传播模型,其中S代表易感个体(Susceptible),I代表感染个体(Infected),R代表恢复个体(Recovered)。SIR模型的基本原理是,通过一定的传播速率和恢复速率来描述易感个体被感染,以及感染个体恢复的过程。
SIR模型(易感-感染-恢复模型)用于描述传染病在群体中的传播过程。在该模型中,人口分为三类个体:
SIR模型的核心方程为:
其中:
β
是传染率,控制感染者向易感者传播病毒的速度。γ
是恢复率,控制感染者恢复并转为恢复者的速度。import numpy as np
import matplotlib.pyplot as plt
# 定义SIR模型的函数
def sir_model(S, I, R, beta, gamma, dt=1):
"""
SIR模型的计算函数。
参数:
S: 当前易感者人数
I: 当前感染者人数
R: 当前恢复者人数
beta: 传染率 (感染者每人每日传播的概率)
gamma: 恢复率 (感染者每日恢复的概率)
dt: 时间步长,默认值为1
返回:
更新后的S, I, R
"""
# 计算感染者传播给易感者的数量
new_infected = beta * S * I * dt
# 计算恢复者的数量
new_recovered = gamma * I * dt
# 更新易感者、感染者和恢复者人数
S -= new_infected
I += new_infected - new_recovered
R += new_recovered
return S, I, R
在本模型中,我们使用了以下初始条件:
传染率 β
设置为 0.3,恢复率 γ
设置为 0.1,模拟天数为 160天。
# 初始参数设置
S0 = 0.99 # 初始时易感者比例
I0 = 0.01 # 初始时感染者比例
R0 = 0.0 # 初始时恢复者比例
beta = 0.3 # 传染率
gamma = 0.1 # 恢复率
T = 160 # 模拟天数
# 初始化变量
S = S0
I = I0
R = R0
time_steps = np.arange(0, T)
# 存储每个时间步的S, I, R值
S_vals = []
I_vals = []
R_vals = []
# 运行SIR模型
for t in time_steps:
S_vals.append(S)
I_vals.append(I)
R_vals.append(R)
S, I, R = sir_model(S, I, R, beta, gamma)
# 绘制结果
plt.figure(figsize=(10,6))
plt.plot(time_steps, S_vals, label="Susceptible (S)", color="blue")
plt.plot(time_steps, I_vals, label="Infected (I)", color="red")
plt.plot(time_steps, R_vals, label="Recovered (R)", color="green")
plt.xlabel("Time (days)")
plt.ylabel("Proportion of population")
plt.title("SIR Model Simulation")
plt.legend()
plt.grid(True)
plt.show()
通过仿真结果,可以观察到随着时间的推移,感染者比例会先急剧上升,之后由于恢复者的增加,感染者数量逐渐减少。恢复者的比例会不断上升,而易感者比例会不断下降。