基于离散时间系统的SIR模型

#新星杯·14天创作挑战营·第11期#

在疫情防控的关键时期,如何准确预测传染病的传播趋势成为了全球关注的焦点。数学模型作为一种强大的工具,可以帮助我们理解疾病传播的机制,并为公共卫生决策提供科学依据。今天,我们将深入探讨一个基于随机微分方程的传染病传播模型,通过 MATLAB 代码实现并可视化分析,揭示传染病传播的内在规律。

一、SIR 模型:传染病传播的基础框架

SIR 模型是传染病动力学中最经典的模型之一,它将人群分为三类:

  • 易感者 (Susceptible):尚未感染但可能被感染的个体
  • 感染者 (Infected):已经感染并具有传染性的个体
  • 康复者 (Recovered):已经康复并获得免疫力的个体

模型通过两个关键参数描述疾病传播过程:

  • β(beta):传染率,表示接触导致感染的概率
  • γ(gamma):恢复率,表示感染者康复的速率

在这个模型中,我们还引入了一个新参数:

  • ι(iota):外部输入率,表示外部感染源的影响

下面是 SIR 模型的核心代码实现:

function [S_next, I_next, R_next, Y_next] = sir(S, I, R, Y, parms)
    % 解包参数
    beta  = parms.beta;
    gamma = parms.gamma;
    iota  = parms.iota;
    N     = parms.N;
    dt    = parms.dt;
    
    % 计算感染力和二项式概率
    lambda = beta * (I + iota) / N;
    ifrac  = 1 - exp(-lambda * dt);
    rfrac  = 1 - exp(-gamma * dt);
    
    % 随机抽取转换人数
    infection = binornd(S, ifrac);
    recovery  = binornd(I, rfrac);
    
    % 更新各类人群数量
    S_next = S - infection;
    I_next = I + infection - recovery;
    R_next = R + recovery;
    Y_next = Y + infection;
end

这段代码实现了 SIR 模型的核心逻辑:

  1. 计算感染力 λ,表示单位时间内易感者接触到感染者的概率
  2. 利用指数函数将连续时间的参数转换为离散时间步长 dt 内的概率
  3. 使用二项分布随机抽样,模拟感染和康复过程的随机性
  4. 更新各类人群的数量,并记录累计感染人数

二、随机模拟:捕捉传染病传播的不确定性

在现实世界中,传染病的传播具有很大的随机性。例如,一次偶然的大规模聚集可能导致感染人数激增,而严格的防控措施又可能迅速遏制疫情。为了捕捉这种不确定性,我们使用随机微分方程进行模拟。

下面是模拟代码:

% Parameters: [beta, gamma, iota, N, dt]
parms = struct( ...
    'beta',  0.1, ...
    'gamma', 0.05, ...
    'iota',  0.01, ...
    'N',     1000, ...
    'dt',    0.1  ...
);
tf = 200;  % 模拟总时间
tl = 2001; % 时间点数量
t  = linspace(0, tf, tl); % 生成时间向量

% 预分配内存
S = zeros(1, tl);
I = zeros(1, tl);
R = zeros(1, tl);
Y = zeros(1, tl);  % 累计新感染人数

% 初始状态
S(1) = 999;  % 初始易感者
I(1) =   1;  % 初始感染者
R(1) =   0;  % 初始康复者
Y(1) =   0;  % 初始累计感染人数

% 时间步进循环
for j = 2:tl
    [S(j), I(j), R(j), Y(j)] = sir( ...
        S(j-1), I(j-1), R(j-1), Y(j-1), parms);
end

% 将结果存入结构体
results.t = t;
results.S = S;
results.I = I;
results.R = R;
results.Y = Y;

这段代码完成了整个模拟过程:

  1. 定义模型参数,包括传染率、恢复率、外部输入率等
  2. 设置模拟时间范围和时间步长
  3. 初始化各类人群的数量
  4. 通过时间步进循环,逐点计算每个时间点的人群数量
  5. 将结果存储在结构体中,便于后续分析和可视化

三、结果可视化:直观展示传染病传播动态

可视化是理解模型结果的关键步骤。通过绘制不同人群随时间的变化曲线,我们可以直观地观察传染病的传播趋势。

下面是可视化代码:

% 假设已经完成模拟:res = simulate();

figure;
hold on;

% 绘制各类人群随时间的变化
plot(res.time, res.S, 'r', 'LineWidth', 2);  % 易感者 - 红色
plot(res.time, res.I, 'g', 'LineWidth', 2);  % 感染者 - 绿色
plot(res.time, res.R, 'b', 'LineWidth', 2);  % 康复者 - 蓝色

% 添加标签和图例
xlabel('Time', 'FontWeight', 'bold');
ylabel('Number', 'FontWeight', 'bold');
legend('Susceptible','Infected','Recovered', 'Location','best');

hold off;

运行这段代码后,我们将得到一个包含三条曲线的图表:

  • 红色曲线:表示易感者数量随时间的变化。随着感染的传播,易感者数量逐渐减少。
  • 绿色曲线:表示感染者数量随时间的变化。通常会呈现先上升后下降的钟形曲线,反映疫情的爆发和消退过程。
  • 蓝色曲线:表示康复者数量随时间的变化。随着感染者康复,康复者数量持续增加。

四、模型分析:解读传染病传播的关键指标

通过分析模拟结果,我们可以获得以下关键指标:

1. 基本再生数 R₀

基本再生数 R₀是传染病传播的重要指标,定义为一个感染者在易感人群中能够平均感染的人数。在 SIR 模型中,R₀可以近似计算为: \(R_0 = \frac{\beta}{\gamma}\) 当 R₀ > 1 时,疫情会爆发;当 R₀ < 1 时,疫情会逐渐消退。在我们的模型中,R₀ = 0.1/0.05 = 2,表示一个感染者平均能感染 2 个人,疫情会迅速传播。

2. 峰值时间和峰值规模

通过观察感染者曲线的峰值,我们可以预测疫情的严重程度和到达峰值的时间。这对于医疗资源的准备和防控措施的实施至关重要。

3. 最终感染比例

通过分析康复者曲线的最终值,我们可以估算出疫情结束后总共有多少人被感染。这对于评估疫情的总体影响非常重要。

五、参数敏感性分析:探索不同因素的影响

模型中的参数(如传染率 β、恢复率 γ、外部输入率 ι)对传染病的传播有着重要影响。通过改变这些参数,我们可以进行敏感性分析,了解不同因素对疫情发展的影响。

例如:

  • 降低传染率 β:可以通过戴口罩、保持社交距离等措施实现,这将显著减缓疫情传播速度
  • 提高恢复率 γ:可以通过医疗干预和提高人群免疫力实现,这将缩短感染者的传染期
  • 控制外部输入率 ι:可以通过边境管控和检疫措施实现,这将减少外部感染源的影响

通过调整代码中的参数,我们可以模拟不同防控策略下的疫情发展,为政策制定提供科学依据。

六、模型拓展:从 SIR 到更复杂的传染病模型

SIR 模型是传染病动力学的基础,但现实中的传染病传播往往更加复杂。为了更准确地描述疫情,我们可以对模型进行拓展:

1. SEIR 模型

在 SIR 模型的基础上增加了潜伏期,将人群分为:易感者 (S)、暴露者 (E)、感染者 (I) 和康复者 (R)。

2. 考虑空间分布的模型

考虑人群的空间分布和移动,模拟疫情在不同地区之间的传播。

3. 考虑年龄结构的模型

不同年龄段的人群在易感性、传染性和死亡率上可能存在差异,考虑年龄结构可以更准确地预测疫情对不同人群的影响。

4. 考虑行为干预的模型

考虑人们的行为变化(如社交距离、戴口罩等)对疫情传播的影响,使模型更加贴近现实。

结语:数学模型助力疫情防控

通过这个基于随机微分方程的 SIR 模型,我们展示了如何用数学工具和代码模拟传染病的传播过程。这种模型不仅可以帮助我们理解传染病的传播机制,还可以为公共卫生决策提供科学依据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值