经典的SIR模型由克马克与麦肯德里克在1927年提出,当时的研究背景是伦敦正在流行黑死病。SIR模型将所有人(在传染性强的病毒面前,假设所有人均可能被感染,但已痊愈者将免疫)分为三类:还没被感染者,数量为 S S S(单位:千人);正感染者,数量为 I I I(单位:千人);已痊愈或死亡者,数量为 R R R(单位:千人)。显然 S S S、 I I I、 R R R均为关于时间 t t t(单位:天)的函数,将其设为 S ( t ) S(t) S(t)、 I ( t ) I(t) I(t)、 R ( t ) R(t) R(t),显然 S ( t ) + I ( t ) + R ( t ) = M S(t)+I(t)+R(t)=M S(t)+I(t)+R(t)=M,其中 M M M为总人口数(单位:千人)。SIR模型构建了 S ( t ) S(t) S(t)、 I ( t ) I(t) I(t)、 R ( t ) R(t) R(t)三者之间的动力学关系。
连续的SIR
由于人数的最小改变单位为1,是系统单位的千分之一,因此可以假设 S ( t ) S(t) S(t)、 I ( t ) I(t) I(t)、 R ( t ) R(t) R(t)均为随时间 t t t变化的连续函数。又由于可导函数可以任意精度逼近连续函数(可导函数类在连续函数类中稠密,这是微分拓扑的一个基本结果),于是可以进一步假设 S ( t ) S(t) S(t)、 I ( t ) I(t) I(t)、 R ( t ) R(t) R(t)均为随时间 t t t变化的可导函数,即 S ′ ( t ) S'(t) S′(t)、 I ′ ( t ) I'(t) I′(t)、 R ′ ( t ) R'(t) R′(t)均存在,分别表示“还没感染人数”“正感染人数”“已痊愈或死亡人数”的变化速度。
关于病毒传播的两个常识性认知如下。
(1)“还没被感染人数” S ( t ) S(t) S(t)逐渐减少。 S ( t ) S(t) S(t)越大, S ( t ) S(t) S(t)下降越快;“正感染人数” I ( t ) I(t) I(t)越大, S ( t ) S(t) S(t)下降越快。而且 S ( t ) S(t) S(t)越大, I ( t ) I(t) I(t)对 S ( t ) S(t) S(t)下降速度的影响越明显。
(2)“已痊愈或已死亡人数” R ( t ) R(t) R(t)的变化速度和 I ( t ) I(t) I(t)正相关。
根据(1)和(2),
S
′
(
t
)
S'(t)
S′(t)和乘积
S
(
t
)
I
(
t
)
S(t)I(t)
S(t)I(t)负相关,
R
′
(
t
)
R'(t)
R′(t)和
I
(
t
)
I(t)
I(t)正相关,于是有
{
d
S
d
t
=
−
α
S
(
t
)
I
(
t
)
d
R
d
t
=
β
I
(
t
)
\left\{ \begin{aligned} \dfrac{dS}{dt}=-\alpha S(t)I(t) \\ \dfrac{dR}{dt}=\beta I(t)~~~~~~~~ \\ \end{aligned} \right.
⎩
⎨
⎧dtdS=−αS(t)I(t)dtdR=βI(t)
其中
α
>
0
\alpha >0
α>0,
β
>
0
\beta >0
β>0分别为待定的正比例常数。再注意到
S
(
t
)
+
I
(
t
)
+
R
(
t
)
=
M
S(t)+I(t)+R(t)=M
S(t)+I(t)+R(t)=M
如果假设总人口数
M
M
M不变,对上式两边求导可得
S
′
(
t
)
+
I
′
(
t
)
+
R
′
(
t
)
=
0
S'(t)+I'(t)+R'(t)=0
S′(t)+I′(t)+R′(t)=0
于是得到微分方程组
{
S
′
(
t
)
=
−
α
S
(
t
)
I
(
t
)
I
′
(
t
)
=
α
S
(
t
)
I
(
t
)
−
β
I
(
t
)
R
′
(
t
)
=
β
I
(
t
)
\left\{ \begin{aligned} S'(t)=-\alpha S(t)I(t)~~~~~~~~\\ I'(t)=\alpha S(t)I(t)-\beta I(t) \\ R'(t)=\beta I(t)~~~~~~~~~~~~~~~~ \end{aligned} \right.
⎩
⎨
⎧S′(t)=−αS(t)I(t) I′(t)=αS(t)I(t)−βI(t)R′(t)=βI(t)
这便是经典的SIR模型,模型中含有两个系统参数
α
\alpha
α和
β
\beta
β,它们的现实意义分别为“病毒在人群中的强度”与“正感染者转化为已痊愈或已死亡者的比例”,当病毒未产生便以前,克认为参数
α
\alpha
α和
β
\beta
β均为正定常数。
离散情形
因为连续的SIR模型可以用微积分作为处理工具,所以更加便于推导性质。但是微分方程组难以求出解析解,面对这种情况,常用的解决办法是离散化模型以便数值模拟。最基本的离散化办法是“用平均变化率代替斜率”,即用
Δ
f
(
t
)
Δ
t
=
f
(
t
+
Δ
t
)
−
f
(
t
)
Δ
t
\frac{\Delta f(t)}{\Delta t}=\frac{f(t+\Delta t)-f(t)}{\Delta t}
ΔtΔf(t)=Δtf(t+Δt)−f(t)
代替
f
′
(
t
)
f'(t)
f′(t)。鉴于目前基本的采样时间单位为1天,则令
Δ
t
=
1
\Delta t=1
Δt=1,于是可得
f
(
t
+
1
)
−
f
(
t
)
1
≈
f
′
(
t
)
\frac{f(t+1)-f(t)}{1}\approx f'(t)
1f(t+1)−f(t)≈f′(t)
即
f
(
t
+
1
)
≈
f
(
t
)
+
f
′
(
t
)
f(t+1)\approx f(t)+f'(t)
f(t+1)≈f(t)+f′(t)
这样就得到了从
t
t
t时刻状态估计
t
+
1
t+1
t+1时刻状态的近似递推关系,这种方法被称为欧拉近似法。
利用欧拉近似法,可以将模型离散化为如下的离散模型
{
S
(
n
+
1
)
=
S
(
n
)
−
α
S
(
n
)
I
(
n
)
I
(
n
+
1
)
=
I
(
n
)
+
α
S
(
n
)
I
(
n
)
−
β
I
(
n
)
R
(
n
+
1
)
=
R
(
n
)
+
β
I
(
n
)
\left\{ \begin{aligned} S(n+1)=S(n)-\alpha S(n)I(n)~~~~~~~~~~\\ I(n+1)=I(n)+\alpha S(n)I(n)-\beta I(n) \\ R(n+1)=R(n)+\beta I(n)~~~~~~~~~~~~~~~~ \end{aligned} \right.
⎩
⎨
⎧S(n+1)=S(n)−αS(n)I(n) I(n+1)=I(n)+αS(n)I(n)−βI(n)R(n+1)=R(n)+βI(n)
其中
n
∈
N
+
n\in N^+
n∈N+。通过代数变形,可推导数列
{
I
(
n
)
}
\{I(n)\}
{I(n)}的递推关系。
n=100;
M=10000;
E=zeros(3,n);
E(1,1)=980;
E(2,1)=20;
E(3,1)=0;
alpha=0.0014;
beta=0.6126;
for t=1:n-1
E(1,t+1)=E(1,t)-alpha.*E(1,t).*E(2,t);
E(2,t+1)=E(2,t)+alpha.*E(1,t).*E(2,t)-beta.*E(2,t);
E(3,t+1)=E(3,t)+beta.*E(2,t);
end
S=E(1,:);
I=E(2,:);
R=E(3,:);
hold on
plot(S,'DisplayName','S','LineWidth',2);
plot(I,'DisplayName','I','LineWidth',2);
plot(R,'DisplayName','R','LineWidth',2);
legend('健康者人数','感染者人数','免疫者人数');
xlabel('迭代次数');
ylabel('人数');
grid on;
hold off;