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

标签:
pythonsir传染病杂谈 |
注:之前说过SIR模型有很多前提条件和假设,比如无死亡,人都可以被治愈,而且治愈时长一定,所以并不能用来预测最终感染人数,但可以用作学术研究。
1. 传染率R0
即一个人可以传染多少个人,如果小于1,即表示病毒可以逐渐消失,大于2,表示呈指数级传播。实际上这个参数是一直随人口流动,隔离措施等动态变化的。
2. 治愈率
以下图片显示了使用不同参数的显示模型数据:
其中蓝色为治愈人数,红色为感染人数,绿色为为未感染人数
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):
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