数学建模笔记.SEIR模型

seir模型matlab代码

SEIR模型是一种常见的传染病传播模型,其微分方程组为

 SEIR模型微分方程组的含义解释

方程逐项解释
  1. 易感者(S)的变化率 dS/dt

    • 负号表示易感者减少,β 是接触率(单位时间内有效接触导致感染的概率)。
    • 减少速率与当前易感者人数 S 和感染者人数 I 成正比,βSI/N 表示易感者被感染的速度3
  2. 潜伏期者(E)的变化率 dE/dt​

    • 第一部分 βSINNβSI​ 是新增潜伏期人数(来自易感者被感染)。
    • 第二部分 σE 表示潜伏期转为感染者的速度,σ 是潜伏期转化为感染期的概率(σ=1/潜伏期天数)。
  3. 感染者(I)的变化率 dI/dt

    • 第一部分 σE 是潜伏期转为感染者的速率。
    • 第二部分 γI 表示感染者康复或死亡的速率,γ 是恢复率(γ=1/平均感染期天数)。
  4. 康复者(R)的变化率 dR/dt

    • γI表示感染者康复后加入康复群体的速率。
模型假设与关键参数
  • 总人口恒定:S+E+I+R=N(忽略出生、死亡和迁移)。
  • 参数关系:基本再生数 R0=β/γ​,表示单个感染者平均传染人数

% SEIR模型参数设置
N = 1e6;        % 总人口
beta = 0.5;     % 感染率
lambda = 1/5.2; % 潜伏期转染病率(潜伏期约5.2天)
gamma = 1/14;   % 康复率(患病期约14天)

% 初始条件 [S E I R]
y0 = [N-10 0 10 0];  % 初始10例感染者

% 时间范围 (0-180天)
tspan = [0 180];

% 求解微分方程
[t,y] = ode45(@(t,y) seir_model(t,y,beta,lambda,gamma,N), tspan, y0);

% 可视化结果
figure;
plot(t, y(:,1), 'b', 'LineWidth', 2); hold on;
plot(t, y(:,2), 'm', 'LineWidth', 2);
plot(t, y(:,3), 'r', 'LineWidth', 2);
plot(t, y(:,4), 'g', 'LineWidth', 2);
legend('易感者(S)','潜伏者(E)','感染者(I)','康复者(R)');
xlabel('时间(天)');
ylabel('人口数量');
title('SEIR传染病模型演化');

function dydt = seir_model(t,y,beta,lambda,gamma,N)
    S = y(1);
    E = y(2);
    I = y(3);
    
    dS = -beta*S*I/N;
    dE = beta*S*I/N - lambda*E;
    dI = lambda*E - gamma*I;
    dR = gamma*I;
    
    dydt = [dS; dE; dI; dR];
end

如何在该模型中添加疫苗接种因素? 

一、模型结构扩展

  1. 增加疫苗接种群体(V):

    S→V→R

    新划分群体:

    • 完全免疫群体(V):完成疫苗接种且产生有效免疫
    • 部分免疫群体(Vp):仅完成部分接种流程
  2. 改良SEIR模型结构

 

五、案例实现(Python示例) 

import numpy as np
from scipy.integrate import odeint

def vac_SEIR(y, t, params):
    S, V, E, I, R = y
    Λ, β, ν, η, δ, σ, γ = params
    dSdt = Λ - β*S*I - ν*S + δ*V
    dVdt = ν*S - δ*V - β*(1-η)*V*I
    dEdt = β*S*I + β*(1-η)*V*I - σ*E
    dIdt = σ*E - γ*I
    dRdt = γ*I
    return [dSdt, dVdt, dEdt, dIdt, dRdt]

# 参数设置
params = [0.01, 0.3, 0.005, 0.9, 1/300, 1/5, 1/10]
t = np.linspace(0, 200, 1000)
y0 = [0.99, 0.0, 0.0, 0.01, 0.0]

solution = odeint(vac_SEIR, y0, t, args=(params,))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值