基於2019-nCoV的SEIR模型的建立與改進

引言

 前面筆者嘗試獲取數據,並進行分析;在之前做的logistic模型得到能較好的預測結果。但是想要模擬全過程,logistic是做不到的,於是引入SEIR模型對其進行分析與預測。

SEIR建模思路

 這是一個帶潛伏期的傳染模型,和沒有考慮潛伏期的SI、SIR的優勢就顯而易見了。具體的建模思路如下圖:
在這裏插入圖片描述
對上述的微分方程求解,不難得到其的差分方程。(字醜勿怪)
在這裏插入圖片描述
參數的選取思路來之筆者的實時數據。

實現

程序

實現工具爲matlab

%SEIR模型
clear;clc;
%參數設置
N=1400000000;%人口數
I=1;%傳染者
R=0;%康復者
D=0;%死亡患者數量
E=0;%潛伏者
S=N-I;%易感染者
r=1;%接觸病患的人數
a=0.125;%潛伏者患病概率
B=0.6;%感染概率
y=0.143;%康復概率
k=0.025373
T=20:1000;
for idx =1:length(T)-1
    S(idx+1)=S(idx)-r*B*I(idx)*S(idx)/N;%易感人數迭代
    E(idx+1)=E(idx)+r*B*S(idx)*I(idx)/N-a*E(idx)%潛伏者人數迭代
    I(idx+1)=I(idx)+a*E(idx)-(y+k)*I(idx);%患病人數迭代
    R(idx+1)=R(idx)+y*I(idx);%康復人數迭代 
    D(idx+1)=D(idx)+k*I(idx);%死亡患者人數迭代
end
plot(T,S,T,E,T,I,T,R,T,D);
grid on;
xlabel('日期');
ylabel('人數');
legend('易感者','潛伏者','傳染者','康復者','死亡者');
title('SEIR模型');
plot(T,E,T,I,T,R,T,D);
grid on;
xlabel('日期');
ylabel('人數');
legend('潛伏者','傳染者','康復者','死亡者');
title('情況');

結果

實現結果:
在這裏插入圖片描述 結果雖然其將整個過程擬合出來,但是結果並不理想,染病人數的峯值達到了上百萬,因此筆者將模型繼續進行修正

第一次修正的SEIR模型

修正思路

 結合現實
1、12月30日發現第一例患者,1月23日開始採取相關措施,於是筆者在第25天時對應減少模型的病者的日接觸人數,作爲採取隔離措施的體現。
2、將潛伏者與患病者的轉染易感者的概率與日接觸人數分開爲兩個參數。在這裏插入圖片描述
可以得到新的差分迭代式
在這裏插入圖片描述

第一次改進程序實現

 實現程序參照上文修改,筆者不一一細述最後的實現結果:
在這裏插入圖片描述
 根據圖像不難看出,在第25天採取措施後疫情得到很好的的控制,在採取措施的大約10天后進入拐點,得到了控制。

第二次修正

思路

在這裏插入圖片描述
 引入潛伏者者轉陰率

實現

程序修改參照上文
在這裏插入圖片描述
將結果細化
在這裏插入圖片描述
 可以看到在12月發現首名發生後的第25天,採取隔離措施措施後,接觸過患者的潛伏者明顯下降,在之後的約半個月後疫情到達拐點,患病人數峯值約爲6萬,隨後情況得到控制。

小結

 SEIR模型在趨勢預測上是要優於logistic模型的,但是由於需要考慮的的參數較多,計算誤差要大於logistic模型。也希望最後我們的控制結果,會比筆者的數學模型還要發展的好!結束的更早。這裏向逆行者致以最崇高的敬意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章