SIR模型的扰动分析

SIR 模型

模型

SIR 模型把人群分成三类:

为了简化讨论,我们把这三个变量除以总人数,这样它们的取值都在 之间。

再引入两个参数:

SIR 模型是下面这个微分方程组

初始条件是 , 并且满足 . 注意记号 是著名的基本传染数而不是 的初始值.

解释: 乘积 是易感人群碰到感染人群的比例,接触并不一定感染,乘上感染率 就是新感染人数(占总人口的比例). 是痊愈者增加的速度。

我们把三个方程相加得到 ,所以对所有时间,我们都有 . 这称之为人口守恒。模型里没有考虑死亡或出生。因为该传染病死去的人,可以归到 中。

SIR 模型 的第一个方程表明 是单调下降,最后一个方程表明 是单调递增,而它们的值都在 之间,所以当 时它们的极限存在,记为 .

 

(S, R) 的分析

因为对所有时间 都成立, 我们可以从中消掉变量 而得到关于 的方程组:

我们在 中去极限 ,方程左边变成零,因为函数值趋向常数。那么方程右边也要等于零,所以我们得到了关系式 ,从而 .

我们试着求解 . 形式上两个方程相除就得到了

初值是 . 那么通过分离变量法,我们得到

这里我们为了简化计算,把 的初值取为 0。实际应用中 ,公式仍然近似成立,

来表示,再代入 的第二个方程,我们就得到了关于 的一个非线性 ODE

并使用关系式 ,我们得到方程

在实际应用中 ( 一开始可能每一百万人只有一个人感染) ,我们把 替换成 ,那么要求解的方程就简化为

我们可以使用牛顿法来求解 ,(在牛顿法中取初始值靠近 0 而不是 1, 因为 1 是 的一个平凡解),从而得到 的一个非常好的近似。

 

I 的分析

我们把关于 的方程重写成

因为 是递减的,并且总是在 之间。对于传染病而言 。我们可以根据 的符号把时间分成三个阶段.

  1. 初始阶段: 这个时候 , 那么 , 也就是说, 是在增长的。
  2. 顶峰(拐点)阶段: 感染人数的最高点在 取到,这个时候 .
  3. 结束阶段: 过了拐点 , 那么 开始下降并趋近于零。

 

扰动分析

回忆一下我们使用的是归一化的函数 ,把初值 用 1 替代。要求解的非线性方程简化为

再加上适当的初始条件就可以求解了。设 . 由 SIR 模型 , 我们也有等式 .

使用分离变量法,方程 的解可以写成

困难在于我们不知道怎么样求 的积分。

我们能求什么?当 是简单的多项式时,比如线性或是二次多项式时,我们能求积分。很简单,那我们用 在不同点的泰勒展开得到多项式逼近,然后就可以求出 的近似解。

给定时间 和函数值 ,满足条件 的解可以写成下面这种形式

注意积分区间 不能包含 的零点,要不然积分有可能不是有限的,比如 .

 

线性逼近

考虑 的形式,我们很容易求到线性逼近 ODE的解为

注意到当 时,我们不能取 . 通过求导,我们得到

从这个公式里,我们可以使用 来确定 .

 

二次逼近

考虑 其中 是二次函数 的两个根。这里我们只考虑二次函数有两个实根的情况。为了积分有定义,左边的积分区间 ,这样积分函数的分母就不为零。

使用分解

我们可以对 求积分而得到

指数函数中的速率 . 从 中求解出 的二次逼近

其中使用到的参数是

是一个 logistic 函数,从 变化到 ,因为

该函数的临界点, 也就是说, 的公式是

再使用 , 我们可以得到

 

泰勒展开

函数 和它的一阶、二阶导数如下

在某一点 处的展开是

我们将在不同时间段,选取适当的 做展开。然后用推导出的公式来求解相应的线性和二次ODE。我们将看到,使用简单的微积分和ODE知识,就可以得到函数非常好的近似。

 

初始阶段

我们选取 . 直接计算可得

对于函数的线性逼近 , 所以我们得到

在初始阶段, 和简单的线性 ODE 的解是一样的:以 的速率指数增长,以 的速率指数下降。

如前所述, 不能取成 0. 我们可以通过 来确定 . 对于 而言, 是给定的,那么

反过来,我们就得到 ,这个初值是很小的正数。

函数 处的二次逼近是 . 基于此,我们得到

我们不需要代入公式去试图化解。从编程的角度而言,只要有了 , 就可以计算函数值了。二次逼近中的增长速率仍然是 .

earlyapproximationR

earlyapproximationI

我们把通过扰动分析得到的解析解和数值解来做比较。图中蓝色曲线是通过MATLAB 的 ode45 求解的数值解,红色曲线是线性ODE的解,黑色是二次ODE的解。

可以看到,在早期,比如 , 线性和二次 ODE 的解都提供了很好的逼近。但之后,线性ODE的解 仍然以指数增长,而二次的 增长会变平缓,然后趋向固定值。相对应的 会指数下降到 0.

我们可以用公式 来预测拐点,也可以用相应的 来预测最后的总感染人数。但因为只是在 处的近似,之后的逼近就没有多大的可信度了。

 

结束阶段

我们计算 的值

函数值 . 根据 的定义,我们得到 从而可以如下简化

对于线性逼近, 所以

其中速率 . 回忆一下早期增长的速率是 要大于结束阶段归零的速率。也就是说,一开始,感染人数会以更快的速率指数增长,后面降下来的时候速率要慢一些,但还是指数型的。

如果我们在公式中选取 , 那么就只能得到常数逼近。当我们观察到 下降了一段时间后,我们可以选取那时的 , 但不能太靠近已经平缓的尾部.

我们接着计算函数的二次泰勒展开

直接计算得到

代入公式我们就得到了二次逼近ODE的解。

endingstateR

endingstageI

和数值解的比较可以看出, 逼近的比 更好。但是当时间在初始阶段时,两者都差了很远,实际上在拐点附近误差已经很大了。

 

拐点阶段

我们选择 , 其中 的最大值点。记

的方程

我们通过求解 得到

再利用 , 我们得到

代入公式,我们得到 只是常数逼近,

函数 的二次逼近是

根据此可以算出

根据对称性,函数

peaktimeR

 

peaktimeI

通过与数值解比较,我们发现在拐点处的二次逼近提供了整体上非常好的逼近。最后的感染人数基本就是拐点处的两倍多一点。 值得指出的是,函数的形状只由一个参数 来确定。确定位置还需要知道拐点时间 .

 

全局逼近

虽然拐点处的 已经提供了很好的逼近,但在时间的两端仍然不是太精确。很自然地,我们可以把三段时间的二次逼近联合起来得到整体更好的逼近。

假设我们已经知道了拐点 . 我们在 附近取一个区间 . 在初始、拐点和结束阶段的二次逼近分别记为 , 我们可以使用下面的分片函数定义

使用类似的公式,可以定义 .

在下图中,我们可以看到 提供了非常好的逼近!我们需要知道的只是几个关键的参数 , 还有关键的拐点时刻 . 虽然我们不能求解非线性 ODE ,但利用简单的微积分和ODE知识,就能得到非常好的逼近。

RIglobal