数学建模学习笔记(十七)传染病模型(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')
  • 11
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SIER模型是一种比较复杂的传染病模型,主要用于描述疾病的传播过程。在使用MATLAB进行SIER模型拟合时,需要进行以下步骤: 1. 定义模型参数 SIER模型包含四个参数:感染率(β)、接触率(α)、恢复率(γ)和暴露率(σ)。这些参数可以通过历史传染病数据估计得到。 2. 构建ODE方程 根据SIER模型的定义,可以得到以下ODE方程: dS/dt = -βSI dE/dt = βSI - σE dI/dt = σE - αI dR/dt = γI 其中S、E、I和R分别表示易感人群、潜伏期人群、感染人群和康复人群的数量。 3. 拟合数据 使用MATLAB中的ode45函数求解ODE方程,得到模型预测值。将预测值与实际数据进行比较,并通过最小二乘法等方法调整模型参数,使得预测值与实际数据的差异最小化。 以下是一个简单的SIER模型拟合代码示例: ``` % 定义模型参数 beta = 0.05; alpha = 0.2; gamma = 0.1; sigma = 0.1; % 定义ODE方程 sier = @(t,y) [-beta*y(1)*y(3); beta*y(1)*y(3) - sigma*y(2); sigma*y(2) - alpha*y(3); gamma*y(3)]; % 设置初始条件和时间范围 y0 = [0.99; 0.01; 0; 0]; tspan = [0 100]; % 求解ODE方程 [t,y] = ode45(sier, tspan, y0); % 绘制拟合曲线 plot(t, y(:,3), 'r-', 'LineWidth', 2); hold on; plot(t, real_data, 'b-', 'LineWidth', 2); legend('Model prediction', 'Real data'); xlabel('Time'); ylabel('Infected population'); ``` 在实际应用中,需要根据具体的数据和模型特点进行参数调整和优化,以得到更准确的拟合结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zstar-_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值