【python】SIR模型实现

来源:互联网 发布:ise软件 编辑:程序博客网 时间:2024/05/01 23:07

                                                                                                 SIR模型python实现

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


可建立下面的三房室模型:



其中:

Parameters
βis the transmission rate and incorporates the encounter rate between susceptible and infectious individuals together with the probability of transmission.γis called the removal or recovery rate, though often we are more interested in its reciprocal (1/γ) which determines the average infectious period.S(0)is the initial proportion of the population that are susceptible.I(0)is the initial proportion of the population that are infectious.

pythonCode:

import scipy.integrate as spiimport numpy as npimport pylab as plbeta=1.4247gamma=0.14286TS=1.0ND=70.0S0=1-1e-6I0=1e-6INPUT = (S0, I0, 0.0)def diff_eqs(INP,t):'''The main set of equations'''Y=np.zeros((3))V = INPY[0] = - beta * V[0] * V[1]Y[1] = beta * V[0] * V[1] - gamma * V[1]Y[2] = gamma * V[1]return Y   # For odeintt_start = 0.0; t_end = ND; t_inc = TSt_range = np.arange(t_start, t_end+t_inc, t_inc)RES = spi.odeint(diff_eqs,INPUT,t_range)print RES#Plotingpl.subplot(111)pl.plot(RES[:,1], '-r', label='Infectious')pl.plot(RES[:,0], '-g', label='Susceptibles')pl.plot(RES[:,2], '-k', label='Recovereds')pl.legend(loc=0)pl.title('SIR_Model.py')pl.xlabel('Time')pl.ylabel('Infectious Susceptibles and Recovereds')pl.xlabel('Time')pl.show()
结果

从图中可见,随着时间的推移传播者刚开始急速上升再缓慢下降。恢复者持续上升趋于稳定,易感染者持续下降趋于稳定。该模型是SIR中最基本模型,此外还有一些考虑出生率、死亡率等因素的模型变种。


参考链接:

SIR模型参考


1 0