假设:
1)节点均匀混合
2)已感染节点以固定概率康复后继续成为易感染节点:
3)病原体感染健康节点的概率为:
动力学方程:
特点:
1)当康复率较低时,系统最终将处于动态平衡,也就是病原体将长期存在。
2)当康复率较高时,系统最终将消灭病原体,因为单位时间内治愈的节点将多于新增节点。
3)采用基本再生数可表征最终达到的系统平衡状态,其基本意义是理想环境下一个易感染个体所引发的新增感染个体数。
采用scipy数值求解动力学方程
import numpy as np
import scipy.integrate as spi
import matplotlib.pyplot as plt
beta=0.4
avg_k=4
mu1=1.7
mu2=1.1
R1=beta*avg_k/mu1
R2=beta*avg_k/mu2
#动力学方程
def si_diff(i,t,mu):
return beta*avg_k*i*(1-i)-mu*i
i0=1e-1
t=np.arange(0,70,1)
#带参数的ODE数值求解
i_t1=spi.odeint(si_diff,i0,t,args=(mu1,))
s_t1=1-i_t1
i_t2=spi.odeint(si_diff,i0,t,args=(mu2,))
s_t2=1-i_t2
fig,ax=plt.subplots(2,1,subplot_kw={'facecolor':"#ebf5ff"})
ax[0].plot(t,i_t1,label="R1="+str(R1)+":i1(t)")
ax[0].plot(t,s_t1,label="R1="+str(R1)+":s1(t)")
ax[1].plot(t,i_t2,label="R2="+str(R2)+":i2(t)")
ax[1].plot(t,s_t2,label="R2="+str(R2)+":s2(t)")
ax[0].set_xlabel("t")
ax[0].set_ylabel("%")
ax[0].legend()
ax[1].set_xlabel("t")
ax[1].set_ylabel("%")
ax[1].legend()
plt.show()
不同R0分析结果