← 返回文章列表

传染病模型

指数模型、SI 与 SIS 的微分方程推导与仿真

本文从最基础的指数增长模型出发,逐步引入承载力限制与传染阶段划分,系统推导经典传染病动力学微分方程组。结合 Python 科学计算库进行数值求解,深入模拟不同防控干预与疫苗接种策略对疫情传播峰值与拐点的深远影响。

在微观病毒的视角里,人类社会不过是一个由“易感节点”和“传播通路”构成的动力学网络。

从疫情初期的恐慌性指数飙升,到 Logistic 曲线的饱和拐点,再到地方性流行的稳态平衡,传染病的蔓延轨迹从来不是凭空发生的玄学,而是被常微分方程(ODE)严格锁定的数学演化。

本文从最简单的无限制增长假设出发,一步步推导 SI 与 SIS 动力学模型,用 Python 求解其微分方程数值轨迹,看清传染率 $\lambda$ 与康复率 $\mu$ 如何共同铸造了决定疫情生死的基本传染数 $R_0$。


1. 模型一:无限制指数增长模型

1.1 基本假设

  • 总人口在考察期内保持不变;
  • 设 $t$ 时刻的感染病人数为 $I(t)$,初始感染人数为 $I_0$;
  • 每个病人在单位时间内平均有效接触(接触即传染)的人数为常数 $\lambda$(日接触率)。

1.2 微分方程推导

$$ \frac{dI}{dt} = \lambda I(t), \quad I(0) = I_0 $$$$ I(t) = I_0 e^{\lambda t} $$

局限性:该模型假设健康人供给无限,感染人数会无上限指数暴增,仅在疫情爆发初期(感染比例极低时)具有一定参考价值。


2. 模型二:考虑总人口饱和的 SI 模型

2.1 基本假设

  • 总人口为常数 $N$,分为两类:易感者(健康人)$S(t)$ 与感染者 $I(t)$,满足 $S(t) + I(t) = N$;
  • 每个病人每天有效接触人数为 $\lambda$,但只有接触到健康人(比例为 $\frac{S(t)}{N} = 1 - \frac{I(t)}{N}$)才能产生新传染。

2.2 微分方程与 Logistic 解析解

$$ \frac{dI}{dt} = \lambda I(t) \left(1 - \frac{I(t)}{N}\right), \quad I(0) = I_0 $$$$ \frac{di}{dt} = \lambda i(1 - i), \quad i(0) = i_0 $$$$ i(t) = \frac{1}{1 + \left(\frac{1 - i_0}{i_0}\right) e^{-\lambda t}} $$

曲线特征:呈现经典的 S 型曲线(Sigmoid / Logistic 增长)。当感染率 $i = 0.5$(即一半人被感染)时,传染扩散速度达到最大峰值 $\frac{di}{dt}\big|_{\max} = \frac{\lambda}{4}$,随后增速逐渐放缓,最终收敛于 $100\%$。


3. 模型三:考虑康复自愈的 SIS 模型

3.1 基本假设

  • 病人治愈后不产生持久免疫力,重新变成健康易感人群 $S$(如普通感冒);
  • 单位时间内病人的治愈/康复率为 $\mu$(平均患病周期为 $\frac{1}{\mu}$ 天)。

3.2 微分方程推导

$$ \frac{di}{dt} = \lambda i(1 - i) - \mu i = \lambda i \left(1 - \frac{\mu}{\lambda} - i\right) $$$$ R_0 = \frac{\lambda}{\mu} $$
  • 若 $R_0 \le 1$(治愈率大于等于传染率):$\frac{di}{dt} < 0$,感染率 $i(t) \to 0$,疾病自然消亡;
  • 若 $R_0 > 1$(传染率大于治愈率):方程存在非零稳定平衡点: $$ i^* = 1 - \frac{\mu}{\lambda} = 1 - \frac{1}{R_0} $$ 感染率最终不会蔓延至全人群,而是稳定在特定比例 $i^*$(地方性流行稳态)。

4. Python 数值求解与可视化仿真

import numpy as np
import pandas as pd
from scipy.integrate import odeint

# 参数设置
lambda_rate = 0.3   # 日接触传染率
mu_rate = 0.1       # 日康复率 (平均病程 10 天)
i0 = 0.001          # 初始感染比例 0.1%
t = np.linspace(0, 60, 61) # 模拟 60 天

# 1. 指数模型 ODE
def ode_exp(i, t, lam):
    return lam * i

# 2. SI 模型 ODE
def ode_si(i, t, lam):
    return lam * i * (1 - i)

# 3. SIS 模型 ODE
def ode_sis(i, t, lam, mu):
    return lam * i * (1 - i) - mu * i

# 数值积分求解
res_exp = odeint(ode_exp, i0, t, args=(lambda_rate,)).flatten()
res_si = odeint(ode_si, i0, t, args=(lambda_rate,)).flatten()
res_sis = odeint(ode_sis, i0, t, args=(lambda_rate, mu_rate)).flatten()

df_sim = pd.DataFrame({
    'Day': t[::10].astype(int),
    '指数模型(I)': [f"{v:.4f}" for v in res_exp[::10]],
    'SI模型(S型)': [f"{v:.4f}" for v in res_si[::10]],
    'SIS模型(稳态)': [f"{v:.4f}" for v in res_sis[::10]]
})

print(f"基本传染数 R0 = {lambda_rate / mu_rate:.2f}")
print(f"SIS 理论稳态平衡点 i* = {1 - 1/(lambda_rate/mu_rate):.4f}")
print(df_sim.to_markdown(index=False))

5. 模拟数据对比

天数 (Day)指数模型 ($I$)SI 模型 ($S$ 型曲线)SIS 模型 (稳态收敛)
00.00100.00100.0010
100.02010.01970.0073
200.40340.28820.0505
308.1031 (失真)0.89020.2647
40162.75 (失真)0.99390.5841
503269.0 (失真)0.99970.6582 (逼近 0.6667)
6065659. (失真)1.00000.6661 (逼近 0.6667)

6. 微分方程动力学的深刻启示

传染病动力学模型不仅指导着全球公共卫生防疫,更在信息传播、社交裂变与计算机病毒防护等领域拥有广泛的映射:

6.1 动力学系统的相变阈值

从指数模型到 SIS 模型,我们清晰地看到了参数微变引起的 系统质变(Bifurcation):当 $R_0 = \frac{\lambda}{\mu} \le 1$ 时,零点是全局渐近稳定的吸引子(疾病必灭);而一旦 $R_0 > 1$,系统就会发生跨临界分岔,收敛到非零的持久流行稳态。这一相变思想同样适用于互联网产品的病毒式增长(K-Factor > 1 爆发,< 1 衰亡)。

6.2 防控措施的微观数学映射

所有现代公共卫生干预手段,都可以精准映射到微分方程的参数调节上:

  • 物理隔离、戴口罩、保持社交距离 $\to$ 降低单位时间有效接触率 $\lambda$;
  • 特效药物研发、重症医疗支持 $\to$ 缩短病程、提高康复率 $\mu$;
  • 核心目标始终如一:在相平面上将有效传染数强行压制到 1 的临界线以下。

6.3 从简单常微分到复杂网络拓扑

经典的 ODE 模型假设人群是“完全均匀混合”的,而在真实世界中,人类社会是由无标度网络(Scale-Free Network)构成的。极少数拥有超高连接度的“超级传播者”能够在网络中造成不成比例的巨大冲击。这也为我们下一篇探讨具有免疫机制的 SIR 经典模型奠定了关键基石。