栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

传染病模型-SIR

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

传染病模型-SIR

一、模型背景

 传染病模型指传染病的基本数学模型,主要研究传染病的传播速度、空间范围、传播途径、动力学机理等问题,以指导对传染病的有效地预防和控制。常见的传染病模型按照传染病类型分为 SI、SIR、SIRS、SEIR 模型,本文着重介绍其中的SIR模型。

二、SIR模型组成与解释

组成

含义

易感者(S)

指未得病者,但缺乏免疫能力,与感染者接触后容易受到感染

感染者(I)

指染上传染病的人,可以传播给 S 类成员

移出者(R)

被隔离或治愈而消除影响的感染人群

三、3者间相互关系

 四、建立动力学模型

 

五、参数解释

参数

含义

S(0)

初始易感者人数(人数比例)

I(0)

初始感染者人数(人数比例)

R(0)

基本再生数(基本传染数)

α

交感率

β

移出率

其中R0可以反映传播态势,若R0<1,则传染病将会逐渐消失,若R0=1,则传染病会变成人口中的地方性流行病,若R0>1,则传染病会以指数方式散布。例如,季节性流感为1.3左右,艾滋病为2-5,SARS为2-5,麻疹为16-18。R0往往是一个取值范围,不同地区,种族间可能有显著差异且R0虽然能反映传播态势但不能决定传染速度(例如参考传播方式艾滋与SARS)

六、代码实现

import numpy as np#矩阵函数库
import matplotlib.pyplot as plt#绘图库
from scipy.integrate import odeint

#SIR模型
def SIR_Model(y,t,a,b):
    S,I,R = y
    dy_dt = [-a*S*I,a*S*I-b*I,b*I]
    return dy_dt

#参数初始化
S0 = 0.99996
I0 = 0.00004
#R0 = 1.2
#S0 = 0.9
#I0 = 0.1
R0 = 0
a = 0.2474
b = 0.1
#b = 0.0108

#作图
t = np.linspace(0,100,10001)#生成序列
res = odeint(SIR_Model,[S0,I0,R0],t,args=(a,b))#生成3行10001列的数据
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.xlabel("time t")
plt.ylabel("percentage y")
plt.title("SIR_Model_Simulation")
plt.legend() #显示图例
plt.show()

七、仿真结果

可以看到在时间t达到71附近时,感染者比例达到最高峰,随后开始逐渐下降,而易感者则全程递减在达到一定t时趋近于0。当然这远远只是理想中的模型情况。模型中仍尚未考虑人口出生,迁移,传染病是否有潜伏期等因素,故需要对模型进行修正,例如引入SEIR模型。

模型修正等待下次奉上,小编也是搜集了多方资料希望能把SIR模型讲的清楚简单,如果有错误欢迎指正,也欢迎各位小伙伴来交流,未完待续~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300319.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号