SIR模型

使用Python实现SIR模型,模拟流行病传播过程


日期

基本介绍

SIR模型是一种经典的传染病传播模型,其中S代表易感个体(Susceptible),I代表感染个体(Infected),R代表恢复个体(Recovered)。SIR模型的基本原理是,通过一定的传播速率和恢复速率来描述易感个体被感染,以及感染个体恢复的过程。

SIR模型仿真

SIR模型(易感-感染-恢复模型)用于描述传染病在群体中的传播过程。在该模型中,人口分为三类个体:

模型方程

SIR模型的核心方程为:

  1. 易感者变化:dS/dt = -β * S * I
  2. 感染者变化:dI/dt = β * S * I - γ * I
  3. 恢复者变化:dR/dt = γ * I

其中:

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()

png

结果分析

通过仿真结果,可以观察到随着时间的推移,感染者比例会先急剧上升,之后由于恢复者的增加,感染者数量逐渐减少。恢复者的比例会不断上升,而易感者比例会不断下降。

李康国
417网吧网管