加载中…
个人资料
多物理场仿真
多物理场仿真
  • 博客等级:
  • 博客积分:0
  • 博客访问:204,426
  • 关注人气:267
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

python实现SIR传播模型(图片数据)

(2020-01-31 08:58:16)
标签:

python

sir

传染病

杂谈

注:之前说过SIR模型有很多前提条件和假设,比如无死亡,人都可以被治愈,而且治愈时长一定,所以并不能用来预测最终感染人数,但可以用作学术研究。

SIR模型中两个重要参数:
1. 传染率R0
即一个人可以传染多少个人,如果小于1,即表示病毒可以逐渐消失,大于2,表示呈指数级传播。实际上这个参数是一直随人口流动,隔离措施等动态变化的。
2. 治愈率

以下图片显示了使用不同参数的显示模型数据:
其中蓝色为治愈人数,红色为感染人数,绿色为为未感染人数
python实现SIR传播模型(图片数据)

python实现SIR传播模型(图片数据)

python实现SIR传播模型(图片数据)

python实现SIR传播模型(图片数据)
python代码:

import scipy.integrate as spi
import numpy as np
import pylab as pl
 
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) 

#beta=1.4247
beta = 1.2 #传染率
gamma=0.01 #治愈率
TS=1.0
ND=100.0
S0=1-1e-6
I0=1e-6
INPUT = (S0, I0, 0.0)
all = 20000 #最终感染人数

def diff_eqs(INP,t):
    Y=np.zeros((3))
    V = INP
    Y[0] = - beta * V[0] * V[1]
    Y[1] = beta * V[0] * V[1] - gamma * V[1]
    Y[2] = gamma * V[1]
    return Y 
 
t_start = 0.0; t_end = ND; t_inc = TS
t_range = np.arange(t_start, t_end+t_inc, t_inc)
RES = spi.odeint(diff_eqs,INPUT,t_range)*all

#打印数据 
print(RES)

pl.rcParams['font.sans-serif'] = 'SimHei'
pl.plot(RES[:,0], '-g^', label='健康数') 
pl.plot(RES[:,2], '-bs', label='恢复数') 
pl.plot(RES[:,1], '-ro', label='感染数')
pl.legend(loc=0)
pl.title('SIR 传染模型', fontproperties = font)
pl.xlabel('时间', fontproperties = font)
pl.ylabel('健康数, 恢复数, 感染数',fontproperties = font)
pl.savefig('2.1-SIR-high.png', dpi=900) # This does, too
pl.show()

参考链接:
https://www.cnblogs.com/scikit-learn/p/6937326.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有