MATLAB 傳染病模型


最近新型冠狀病毒疫情越來越嚴重了,待在家中沒法出去,學習一下經典傳染病模型。

這里總結了五個模型,分別是SI模型,SIS模型,SIR模型,SIRS模型,SEIR模型。

這幾種模型的特點先介紹一下。

首先定義SEIR:

S為易感者 (Susceptible),指未得病者,但缺乏免疫能力,與感染者接觸后容易受到感染;

E為暴露者 (Exposed),指接觸過感染者,但暫無能力傳染給其他人的人,對潛伏期長的傳染病適用;

I為感病者 (Infective),指染上傳染病的人,可以傳播給 S 類成員,將其變為 E 類或 I 類成員;

R為康復者 (Recovered),指被隔離或因病愈而具有免疫力的人。如免疫期有限,R 類成員可以重新變為 S 類。

一、SI模型

該模型只考慮易感者和感病者,感病者不斷去感染易感者。

隨着時間推移,該模型感染者越來越多直到所有人都感染。

其微分方程為:

其中beta為感染率。

二、SIS模型 

該模型依然只考慮易感者和感病者,感病者不斷去感染易感者,這里感病者會得到治療恢復成易感者,不過恢復后依然可能得病。

隨着時間推移,該模型感染者和易感者會達到動態平衡。

其微分方程為:

其中beta為感染率,gamma為治愈率。

三、SIR模型

該模型考慮易感者、感病者與康復者,其中感病者不斷感染易感者,而感病者又不斷接受治療成為康復者,康復者因為得到抗體不會再成為易感者。

隨着時間推移,該模型康復者越來越多,最終所有人都成為康復者。

其微分方程為:

其中beta為感染率,gamma為治愈率。

四、SIRS模型

該模型考慮易感者、感病者與康復者,其中感病者不斷感染易感者,而感病者不斷接受治療成為康復者,康復者獲得抗體能夠抵抗一段時間,不過最終還是會成為易感者。

該模型和SIS模型很像,區別就是康復者能夠抵抗一段時間,也就是有一定的復感率,而SIS模型的復感率為1。

隨着時間推移,該模型同樣會達到一個動態平衡。

其微分方程為:

其中beta為感染率,gamma為治愈率,alpha為復感率。

五、SEIR模型

該模型四種參與者全部考慮,其中感病者不斷感染易感者,易感者得到病毒會成為潛伏者,潛伏者依然能夠使易感者感染,潛伏者有一定概率自己痊愈,感染者接受治療也能夠痊愈,痊愈后不再能夠感染該病。

隨着時間推移,該模型最終也是所有人都會成為康復者。

其微分方程為:

其中beta為感染率,gamma1為潛伏期康復率,gamma2為患者康復率,alpha為潛伏期轉陽率。

各模型matlab代碼如下,其中ode45為4階龍格庫塔法解微分方程,具體實現見上一篇文章:

main.m:

 1 clear all;  2 close all;  3 clc;  4 
 5 %%SI模型  6 [t,h] = ode45(@SI,[0 120],0.01);    %0.01為初始感染人口占比  7 plot(t,h,'r');  8 hold on;  9 plot(t,1-h,'g'); 10 legend('感染人口占比I','健康人口占比S'); 11 title('SI模型') 12 
13 %%SIS模型 14 figure; 15 [t,h] = ode45(@SIS,[0 120],0.01);   %0.01為初始感染人口占比 16 plot(t,h,'r'); 17 hold on; 18 plot(t,1-h,'g'); 19 legend('感染人口占比I','健康人口占比S'); 20 title('SIS模型') 21 
22 %%SIR模型 23 figure; 24 [t,h] = ode45(@SIR,[0 300],[0.01 0.99]);    %[初始感染人口占比 初始健康人口占比] 25 plot(t,h(:,1),'r',t,h(:,2),'b'); 26 hold on; 27 plot(t,1-h(:,2),'g'); 28 legend('感染人口占比I','健康人口占比S','治愈人口占比R'); 29 title('SIR模型') 30 
31 %%SIRS模型 32 figure; 33 [t,h] = ode45(@SIRS,[0 300],[0.01 0.99 0]); %[初始感染人口占比 初始健康人口占比 初始治愈人口占比] 34 plot(t,h(:,1),'r',t,h(:,2),'b'); 35 hold on; 36 plot(t,h(:,3),'g'); 37 legend('感染人口占比I','健康人口占比S','治愈人口占比R'); 38 title('SIRS模型') 39 
40 %%SEIR模型 41 figure; 42 [t,h] = ode45(@SEIR,[0 300],[0.01 0.98 0.01 0]);  %[初始感染人口占比 初始健康人口占比 初始潛伏人口占比 初始治愈人口占比] 43 plot(t,h(:,1),'r'); 44 hold on; 45 plot(t,h(:,2),'b'); 46 plot(t,h(:,3),'m'); 47 plot(t,h(:,4),'g'); 48 legend('感染人口占比I','健康人口占比S','潛伏人口占比E','治愈人口占比R'); 49 title('SEIR模型')

SI.m:

1 function dy=SI(t,x) 2 beta = 0.1;    %感染率 3 dy=beta*x*(1-x);

SIS.m:

1 function dy=SIS(t,x) 2 beta = 0.1;    %感染率 3 gamma= 0.02;    %治愈率 4 dy=beta*x*(1-x)-gamma*x;

SIR.m:

1 function dy=SIR(t,x) 2 beta = 0.1;    %感染率 3 gamma = 0.02;    %治愈率 4 dy=[beta*x(1)*x(2)-gamma*x(1); 5     -beta*x(1)*x(2)];

SIRS.m:

1 function dy=SIRS(t,x) 2 beta = 0.1;      %感染率 3 gamma = 0.02;    %治愈率 4 alpha = 0.01;    %治愈復感率 5 dy=[beta*x(1)*x(2)-gamma*x(1); 6     -beta*x(1)*x(2)+alpha*x(3) 7     gamma*x(1) - alpha*x(3)];

SEIR.m:

1 function dy=SEIR(t,x) 2 beta = 0.1;         %感染率 3 gamma1 = 0.05;      %潛伏期治愈率 4 gamma2 = 0.02;      %患者治愈率 5 alpha = 0.5;        %潛伏期轉陽率 6 dy=[alpha*x(3) - gamma2*x(1); 7     -beta*x(1)*x(2); 8     beta*x(1)*x(2) - (alpha+gamma1)*x(3); 9     gamma1*x(3)+gamma2*x(1)];

模型結果如下:

SI模型:

SIS模型:

SIR模型:

SIRS模型:

SEIR模型:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM