1. 程式人生 > 其它 >數學建模學習筆記(十七)傳染病模型(SIER)

數學建模學習筆記(十七)傳染病模型(SIER)

技術標籤:數學建模學習筆記

傳染病模型講解比較清楚的是知乎這位博主,文章連結戳這在家宅著也能抵抗肺炎!玩一玩SEIR傳染病模型
本文基於這篇文章進行記錄和整理

對於一般傳染病來說,都具備潛伏者(E),因此直接記錄傳統的SIER模型:
在這裡插入圖片描述
模型公式:
{ d S d t = − r β I S N d E d t = r β I S N − σ E d I d t = σ E − γ I d R d t = γ I \left\{ \begin{array}{l} \frac{{dS}}{{dt}} = - \frac{{r\beta IS}}{N}\\ \\ \frac{{dE}}{{dt}} = \frac{{r\beta IS}}{N} - \sigma E\\ \\ \frac{{dI}}{{dt}} = \sigma E - \gamma I\\ \\ \frac{{dR}}{{dt}} = \gamma I \end{array} \right.

dtdS=NrβISdtdE=NrβISσEdtdI=σEγIdtdR=γI
迭代公式:
{ S n = S n − 1 − r β I n − 1 S n − 1 N E n = E n − 1 + r β I n − 1 S n − 1 N − σ E n − 1 I n = I n − 1 + σ E n − 1 − γ I n − 1 R n = R n − 1 + γ I n − 1 \left\{ \begin{array}{l} {S_n} = {S_{n - 1}} - \frac{{r\beta {I_{n - 1}}{S_{n - 1}}}}{N}\\ \\ {E_n} = {E_{n - 1}} + \frac{{r\beta {I_{n - 1}}{S_{n - 1}}}}{N} - \sigma {E_{n - 1}}\\ \\ {I_n} = {I_{n - 1}} + \sigma {E_{n - 1}} - \gamma {I_{n - 1}}\\ \\ {R_n} = {R_{n - 1}} + \gamma {I_{n - 1}} \end{array} \right.
Sn=Sn1NrβIn1Sn1En=En1+NrβIn1Sn1σEn1In=In1+σEn1γIn1Rn=Rn1+γIn1

引入潛伏者傳染概率,改進SEIR模型,
公式為
{ d S d t = − r β I S N − r 2 β 2 E S N d E d t = r β I S N − σ E + r 2 β 2 E S N d I d t = σ E − γ I d R d t = γ I \left\{ \begin{array}{l} {\frac{{dS}}{{dt}} = - \frac{{r\beta IS}}{N} - \frac{{{r_2}{\beta _2}ES}}{N}}\\ {}\\ {\frac{{dE}}{{dt}} = \frac{{r\beta IS}}{N} - \sigma E + \frac{{{r_2}{\beta _2}ES}}{N}}\\ {}\\ {\frac{{dI}}{{dt}} = \sigma E - \gamma I}\\ {}\\ {\frac{{dR}}{{dt}} = \gamma I} \end{array} \right.

dtdS=NrβISNr2β2ESdtdE=NrβISσE+Nr2β2ESdtdI=σEγIdtdR=γI

迭代公式為:
{ S n = S n − 1 − r β I n − 1 S n − 1 N − r 2 β 2 E n − 1 S n − 1 N E n = E n − 1 + r β I n − 1 S n − 1 N − σ E n − 1 + r 2 β 2 E n − 1 S n − 1 N I n = I n − 1 + σ E n − 1 − γ I n − 1 R n = R n − 1 + γ I n − 1 \left\{ \begin{array}{l} {S_n} = {S_{n - 1}} - \frac{{r\beta {I_{n - 1}}{S_{n - 1}}}}{N} - \frac{{{r_2}{\beta _2}{E_{n - 1}}{S_{n - 1}}}}{N}\\ \\ {E_n} = {E_{n - 1}} + \frac{{r\beta {I_{n - 1}}{S_{n - 1}}}}{N} - \sigma {E_{n - 1}} + \frac{{{r_2}{\beta _2}{E_{n - 1}}{S_{n - 1}}}}{N}\\ \\ {I_n} = {I_{n - 1}} + \sigma {E_{n - 1}} - \gamma {I_{n - 1}}\\ \\ {R_n} = {R_{n - 1}} + \gamma {I_{n - 1}} \end{array} \right. Sn=Sn1NrβIn1Sn1Nr2β2En1Sn1En=En1+NrβIn1Sn1σEn1+Nr2β2En1Sn1In=In1+σEn1γIn1Rn=Rn1+γIn1

matlab程式碼:
原始碼:

clear;clc;

%--------------------------------------------------------------------------
%   引數設定
%--------------------------------------------------------------------------
N = 12700000;                                                                  %人口總數
E = 0;                                                                      %潛伏者
I = 1;                                                                      %傳染者
S = N - I;                                                                  %易感者
R = 0;                                                                      %康復者

r = 20;                                                                     %感染者接觸易感者的人數
B = 0.03;                                                                   %傳染概率
a = 0.1;                                                                    %潛伏者轉化為感染者概率
y = 0.1;                                                                    %康復概率

T = 1:140;
for idx = 1:length(T)-1
    S(idx+1) = S(idx) - r*B*S(idx)*I(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*I(idx);
    R(idx+1) = R(idx) + y*I(idx);
end

plot(T,S,T,E,T,I,T,R);grid on;
xlabel('天');ylabel('人數')
legend('易感者','潛伏者','傳染者','康復者')

稍作改進,反應每日新增病例情況:

%--------------------------------------------------------------------------
%   初始化
%--------------------------------------------------------------------------
clear;clc;

%--------------------------------------------------------------------------
%   引數設定
%--------------------------------------------------------------------------
N = 29000;                                                                  %人口總數
E = 0;                                                                      %潛伏者
I = 1;                                                                      %傳染者
S = N - I;                                                                  %易感者
R = 0;                                                                      %康復者
m=1;

r = 25;                                                                     %感染者接觸易感者的人數
B = 0.03;                                                                   %傳染概率
a = 0.1;                                                                    %潛伏者轉化為感染者概率
r2 = 3;                                                                     %潛伏者接觸易感者的人數
B2 = 0.03;                                                                  %潛伏者傳染正常人的概率
y = 0.1;                                                                    %康復概率

T = 1:182;
for idx = 1:length(T)-1
    S(idx+1) = S(idx) - r*B*S(idx)*I(idx)/N(1) - r2*B2*S(idx)*E(idx)/N;
    E(idx+1) = E(idx) + r*B*S(idx)*I(idx)/N(1)-a*E(idx) + r2*B2*S(idx)*E(idx)/N;
    I(idx+1) = I(idx) + a*E(idx) - y*I(idx);
    R(idx+1) = R(idx) + y*I(idx);
    m(idx+1) = E(idx+1) + I(idx+1);
end


x=1:182;
plot(x,m);grid on;
xlabel('day');ylabel('Demand for drugs')