+ l' c* R: c" p9 r9 @/ o* S; YS 类(Susceptible),易感者,指缺乏免疫能力的健康人,与感染者接触后容易受到感染;+ F4 e+ M" E o" f- c
, I2 g. `. s; O( c
7 d' Y* i1 C$ b1 K4 |- W
E 类(Exposed),暴露者,指接触过感染者但暂无传染性的人,适用于存在潜伏期的传染病; . m# E) A$ m. P4 F& t0 J# R& d a2 r- P6 Q2 ?- V- z7 {; ^
5 _* ^9 }5 s) A: A7 E( _* i
I 类(Infectious),患病者,指具有传染性的患病者,可以传播给 S 类成员将其变为 E 类或 I 类成员; 5 ]& F, U0 B9 D8 X* M) ~) Y. }: x+ n% l! z, G- E! y
5 P% ?7 T. h3 `# W! b, ~7 G( D3 q) C
R 类(Recovered),康复者,指病愈后具有免疫力的人。如果免疫期有限,仍可以重新变为 S 类成员,进而被感染;如果是终身免疫,则不能再变为 S类、E类或 I 类成员。5 v- F6 S) g" p
: _' u3 {+ ^8 Y) M' C/ W0 n5 m; T& [, z$ M& B2 X
4 |) w! X! ?2 A2 V+ ]
2. 疫情传播 SI 模型 . S( K5 s1 B4 |* Q, D$ ?2.1 SI 模型的适用范围 % X& P: [3 W. h, ]6 P$ F% TSI 模型适用于只有易感者和患病者两类人群,且无法治愈的疾病,例如 T型病、僵尸。& E% Q% H' [2 E+ T
" a* P: M; V0 c( T
" X. Z' {6 R( J6 L5 H8 b8 G- ^
4 Y) W) Y. J1 O" i% L2 J' X. Q ' _: H5 a, [; L2 h, q4 I! G) d2.2 SI 模型的假设 & m) X8 |) q& U6 F考察地区的总人数 N 不变,即不考虑生死或迁移;$ N. V$ Q+ {- H7 V) W
人群分为易感者(S类)和患病者(I类)两类; ! ?! K G, X3 p- \+ ?' t8 `9 C易感者(S类)与患病者(I类)有效接触即被感染,变为患病者,无潜伏期、无治愈情况、无免疫力;% [" }/ v/ w0 C0 ^7 m# K
每个患病者每天有效接触的易感者的平均人数(日接触数)是 λ \lambdaλ,称为日接触率;2 q, x4 n! U) t" w V
将第 t 天时 S类、I 类人群的占比记为 s ( t ) s(t)s(t)、i ( t ) i(t)i(t),数量为 S ( t ) S(t)S(t)、I ( t ) I(t)I(t);初始日期 t = 0 t=0t=0 时, S类、I 类人群占比的初值为 s 0 s_0s o- I* f7 I$ R2 d, Y01 D5 n3 s$ s% b @
8 O. H, p1 T. [. y! {% k 、i 0 i_0i 7 @ C# e) B) W9 B+ N0) Y0 }# M& ^/ q$ ~
) ^5 V) ?: G- n: w- o 。 . P$ y) `( Z7 }2 P2.3 SI 模型的微分方程! ^. H2 Y1 I/ o, ^$ @
由 5 B# g9 O1 V% [: S# U: FN d i d t = N λ s i N\frac{di}{dt} = N\lambda s i ?, v% M* @7 o8 hN / O/ ^# @4 o' y: j" U: j, r
dt) j+ d5 i5 o5 n. w8 C- L2 D" q; U+ Q
di # Q4 F8 P# c5 \) M! }/ } v; }& O # M( C& }4 T/ ?8 j; X& v1 h =Nλsi4 A9 g: v M: p6 J% b# O
% A! |. g7 v! Z
8 v$ t9 O3 d4 W# H得:- ?; g+ g9 j& E+ H% J4 m
d i d t = λ i ( 1 − i ) , i ( 0 ) = i 0 \frac{di}{dt} = \lambda i (1-i),\ i(0) = i_04 |9 Z8 V' ]7 M+ B! T
dt % [( x `/ L- z% v8 r& i5 b% idi 7 e% _7 \/ {) d/ @/ j5 ^ . }: g! t+ b6 e, j9 n0 v
=λi(1−i), i(0)=i # @( a+ v2 L! @: ?, X! o- z" X0 ) A6 x4 b7 w& ~- O( b : _& y' \3 e# N% r6 N
/ x1 [6 \4 p I, { \2 p
* N; J$ x1 {6 M' i" r # m$ F7 U# ~8 o* b* V. {这是 Logistic 模型,用分离变量法可以求出其解析解为: - `& u9 X. G7 x0 mi ( t ) = 1 1 + ( 1 / i 0 − 1 ) e − λ t I ( t ) = N i ( t ) i(t)=\frac{1}{1+(1/i_0 - 1)\ e^{-\lambda t}}\\ I(t)= N\ i(t): G; ~9 ]8 o9 W6 M# {5 u1 X
i(t)= 4 Z. y0 b3 B( ?0 [3 k; k) n4 ~% ], {% ~+ Q1+(1/i # w/ g6 s2 N2 b! i* N
0 4 \$ Q: P" c- x8 V& m) C( ? 4 x8 J7 w$ `# W9 o' s −1) e }0 O0 J3 m$ T7 d4 X6 b
−λt5 P/ N" S( G; c* w* h! l) _4 b, K
8 H, `4 p/ E# m6 Y; F
1# n; c) Y0 {3 i. `% a6 `
b: E" |/ F! z+ M1 Z 6 |* ?3 H' W0 J2 r
I(t)=N i(t)6 a0 g& \" m0 E% r" q6 z5 k3 a$ X
" h* V# f' i- Q$ O% Y8 a2 M @) `/ l
# S. M; M) c7 n9 C' q5 X# R# P8 S1 G( [- K
W$ J$ w2 I7 y; Z# T# t
3. SI 模型的 Python 编程 $ E3 e b1 Z" q0 x$ Q5 y3.1 SI 模型的解析解0 w* F5 m1 F" I# h
上文已经得到 SI 模型的解析解,对此很容易通过 Python 编程实现,详见本文例程。 : o. n( T0 Z. y, F. t( ]- a& ~7 p% ^* H& o: D& K/ b3 t
- P' c- F0 t" P& Y8 a# H, g, A
虽然 SI 模型的解析解并不复杂,而且解的精度当然是最好的,但我们仍然不鼓励用解析解的方法。原因在于,一是对于小白求解析解的过程相对复杂困难,而且可能出错,二是对于更复杂的模型是没有解析解的,即便大神也只能用数值方法求解。既然如此,不如从一开始就学习、掌握数值求解方法,熟悉数值解法的编程实现。$ ~9 f) Q! g/ O. i h1 H( i+ \
! V! B3 y% Y2 _