基于python实现简单的传染病模型

该文章展示了如何使用Python中的numpy、scipy和matplotlib库来实现SIR模型(Susceptible-Infected-Recovered模型),模拟传染病的传播过程,并对结果进行可视化。文章强调了在实际应用中考虑的多因素,如人群流动性、环境和康复情况。
摘要由CSDN通过智能技术生成
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# 设置Matplotlib以支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为黑体,确保支持中文
plt.rcParams['axes.unicode_minus'] = False  # 正确显示负号

# SIR模型参数
N = 10099 # 总人口
I0 = 1  # 初始感染者人数
R0 = 2  # 初始康复者人数
S0 = N - I0 - R0  # 初始易感者人数
beta = 0.2  # 感染率
gamma = 0.1  # 康复率


# SIR模型的微分方程
def deriv(y, t, N, beta, gamma):
    S, I, R = y
    dSdt = -beta * S * I / N
    dIdt = beta * S * I / N - gamma * I
    dRdt = gamma * I
    return dSdt, dIdt, dRdt


# 初始条件向量
y0 = S0, I0, R0

# 时间点(以天为单位)
t = np.linspace(0, 160, 160)

# 集成SIR方程
ret = odeint(deriv, y0, t, args=(N, beta, gamma))
S, I, R = ret.T

# 绘制结果
fig, ax = plt.subplots()
ax.plot(t, S / 1000, 'b', alpha=0.5, lw=2, label='易感者(千人)')
ax.plot(t, I / 1000, 'r', alpha=0.5, lw=2, label='感染者(千人)')
ax.plot(t, R / 1000, 'g', alpha=0.5, lw=2, label='康复者(千人)')

ax.set_xlabel('时间 /天')
ax.set_ylabel('人数(千人)')
ax.set_title('SIR模型模拟结果')
ax.tick_params(axis='x', labelsize=10, labelcolor='b')
ax.tick_params(axis='y', labelsize=10, labelcolor='b')
ax.yaxis.set_tick_params(length=0)
ax.xaxis.set_tick_params(length=0)
ax.grid(True, which='major', c='w', lw=2, ls='-')
ax.legend()

for spine in ('top', 'right', 'bottom', 'left'):
    ax.spines[spine].set_visible(False)

plt.show()

这只是一个基于Python实现的简单的传染病模型作为一个示例。

实际过程中需要考虑的因素是很多的,人群的流动性、气候环境、地理位置、人群的康复等各种条件都需要考虑。

SIR模型模拟结果

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值