生物计算:SIR模型笔记
1SIR模型
susceptible(易受感染的但沒有被感染的)
infected(感染的)
recovered(恢復并免疫了的)
1.1? 狀態定義
第t天:
| 狀態為S的人數 | x(t) |
| 狀態為I的人數 | y(t) |
| 狀態為R的人數 | z(t) |
| 總人數 | N |
1.2 SIR方程
這是一種形式的SIR,實際上還有很多種。
1.2.1 SIR方程解釋
假設每天每個S狀態的人(易受感染的但沒有被感染的人)和其他m個人有關聯
在第t天, 總體感染人的比例為
——>對于每一個S狀態的人的這m個有關聯的人里面,有?個人是感染了的
而第t天一共有x(t)個狀態是S的人
——>在第t天,所有狀態為S的人的x(t) × m個有關聯的人里面,有個人是感染了的(這個數量不一定等于狀態為I的人的數量,甚至可能比狀態為I的人的數量多。因為一個感染的人可能和多個狀態為S的人有關聯)
假設每一個“有關聯”的感染者使被關聯的S狀態的人被感染的概率是p
——>在第t天,新增感染者的數量為
我們令mp=β,β稱之為感染接觸率
那么對于S狀態的人我們就有:
同時,我們令恢復率為r(也即是每天有r比例的感染者康復)
那么對于I和R狀態的人我們又有:
1.3 用python實現SIR
1.3.1 導入庫
import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt1.3.2 數據定義
N=1000 #總人口 I0=1 #一開始的感染人口 R0=0 #一開始的治愈(免疫)人口 S0=N-I0-R0 #一開始的易感染人口 beta=0.2 #感染接觸率β gamma=0.1 #恢復率 t=np.linspace(0,159,160) #設置時間片段為160天1.3.3 SIR模型定義
def sir(y,t,N,beta,gamma):S,I,R=ydS_dt=-beta*S*I/NdI_dt=beta*S*I/N-gamma*IdR_dt=gamma*Ireturn(dS_dt,dI_dt,dR_dt) #SIR常微分方程1.3.4 進行SIR的常微分方程計算
y0=(S0,I0,R0) #初始化參數ret=odeint(sir,y0,t,args=(N,beta,gamma)) ret.shape #(160, 3)S=ret[:,0] I=ret[:,1] R=ret[:,2]1.3.5 結果可視化
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號plt.plot(t,S,color='b',label='易感人群') plt.plot(t,I,color='r',label='感染人群') plt.plot(t,R,color='g',label='康復/免疫人abs')plt.xlabel('天數,單位:天') plt.ylabel('人數,單位:人') #設置橫縱軸標題plt.legend() #顯示標簽 plt.show()2 SEIR
1、S 類,易感者 (Susceptible),指未得病者,但缺乏免疫能力,與感染者接觸后容易受到感染;
2、E 類,暴露者 (Exposed),指接觸過感染者,但暫無能力傳染給其他人的人,對潛伏期長的傳染病適用;
3、I 類,感病者 (Infectious),指染上傳染病的人,可以傳播給 S 類成員,將其變為 E 類或 I 類成員;
4、R 類,康復者 (Recovered),指被隔離或因病愈而具有免疫力的人。如免疫期有限,R 類成員可以重新變為 S 類。
總結
以上是生活随笔為你收集整理的生物计算:SIR模型笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python笔记:断言assert
- 下一篇: 文巾解题 1833. 雪糕的最大数量