sir模型 python_SIR传染病模型(附Python代码)

本文介绍了SIR模型的基本概念,包括易感、感染和免疫三种状态,并阐述了模型建立的三个假设。提供了SIR模型的Python代码实现,通过微分方程模拟疾病传播过程,并展示可视化结果。
摘要由CSDN通过智能技术生成

2020.2.5 更新:

code中S0, I0, R0均是比例,不是具体人数,请自行通过各个类别人数计算各类型人群比例。

原文:

传染病模型有四种状态:S(易感态)、I(感染态)、R(免疫态)、E(潜伏期)。

SIR模型是传染病模型中最经典的模型。SIR模型中,染病人群为传染的源头,他通过一定的几率把传染病传给易感人群,他自己也有一定的几率/可以被治愈并免疫,或者死亡;易感人群一旦被感染,就又成为了新的传染源。将人群划分为三类,易感染者(Susceptible)、已感染者(Infective)和已恢复者(Recovered )。

SIR模型有两个阶段:易感人群与感染人员接触时被传染,接触速率为 beta

感染人群以固定平均速率 gamma 恢复或死亡

SIR模型的建立基于以下三个假设:

⑴不考虑人口的出生、死亡、流动等种群动力因素。人口始终保持一个常数,即N(t)≡K。

⑵一个病人一旦与易感者接触就必然具有一定的传染力。假设 t 时刻单位时间内,一个病人能传染的易感者数目与此环境内易感者总数s(t)成正比,比例系数为β,从而在t时刻单位时间内被所有病人传染的人数为βs(t)i(t)。

⑶ t 时刻,单位时间内从染病者中移出的人数与病人数量成正比,比例系数为γ,单位时间内移出者的数量为γi(t)。

基于以上三个假设条件,感染机制如下所示:

在以上三个基本假设条件下,可知:当易感个体和感染个体充分混合时,感染个体的增长率为

,易感个体的下降率为

,恢复个体的增长率为

。易感者从患病到移出的过程可以用微分方程表示如下:

import scipy.integrate

import numpy as np

import matplotlib.pyplot as plt

# model

def SIR_model(y, t, beta, gamma):

S, I, R = y

dS_dt = -beta * S * I

dI_dt = beta * S * I - gamma * I

dR_dt = gamma * I

return ([dS_dt, dI_dt, dR_dt])

# initialization

S0 = 0.9 # ratio

I0 = 0.1 # ratio

R0 = 0.0 # ratio

beta = 0.35

gamma = 0.1

# time vector

t = np.linspace(0, 100, 10000)

# result

res = scipy.integrate.odeint(SIR_model, [S0, I0, R0], t, args=(beta, gamma))

res = np.array(res)

# plot

plt.figure(figsize=[6, 4])

plt.plot(t, res[:, 0], label='S(t)')

plt.plot(t, res[:, 1], label='I(t)')

plt.plot(t, res[:, 2], label='R(t)')

plt.legend()

plt.grid()

plt.xlabel('time')

plt.ylabel('proportions')

plt.title('SIR model simulation')

plt.show()

结果图:

更多有关传染病数学模型的讨论可参考:

参考资料:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值