数学建模社区-数学中国
标题:
数学建模之传染病SIR模型(新冠真实数据)
[打印本页]
作者:
杨利霞
时间:
2021-6-22 15:35
标题:
数学建模之传染病SIR模型(新冠真实数据)
' M7 a9 D. i. H1 k. Q* X
数学建模之传染病SIR模型(新冠真实数据)
2 } h5 ?6 M: v; z8 e) C) y
传染病模型的基本问题
# m& Y$ W4 v5 I# z. ?9 U6 `
描述传染病的传播过程
6 z7 ?) g _2 P3 N o" H
分析受感染人数的变化规律
8 ^# `! B6 q6 @' W+ W' H2 Q& _- u
预报传染病高潮到来的时刻
# h/ c: H5 p: u. F7 G, U% j
预防传染病蔓延的手段
: S# Q) z( h; l/ n# t
按照传播过程的一般规律用机理分析方法建立模型
9 w( v6 O5 c) U) o! E. L5 }
注:我们这里是介绍数学医学领域中基本的传染病模型。不从医学角度分析各种传染病的特殊机理,按照传播过程的规律建立微分方程模型.
; n5 W# Y/ L6 ^! v- e. s" Z) v
. n# N: u* _1 ] W& N. R
- A$ Y, S- X5 M2 ]. X% P
建立模型
|6 X0 N5 w; q/ z, m
模型一
4 `( ?" v* H+ A+ I. S
假设:
0 y9 W& C# s0 m0 C* t! B
* R0 e& R) k' s/ k. {% `
6 z( I8 M' _7 g6 K; R# l$ q/ C# S) l
设已知感染人数为i ( t ) i(t)i(t)(病人数量随时间变化)
% G: a/ G' p# O# e2 X3 k
设每个病人(单位时间)每天有效接触(足以使人治病)人数为λ \lambdaλ
5 i0 L' |& b% _0 @5 J8 u
模型:
; X _5 N( U" U' X4 N% c# }" n
单位时间Δ t \Delta{t}Δt内,新 增 的 人 数 ( 现 有 − 原 有 ) = 原 有 的 × λ 新增的人数(现有-原有)=原有的 \times \lambda新增的人数(现有−原有)=原有的×λ,即
- Q; F2 O% k# X1 Z
2 m# p* b- C. s. _! ]! ^/ Q
& c7 k! ?0 T8 u% }3 z6 N: e
i ( t + Δ t ) − i ( t ) = λ i ( t ) Δ t i(t+\Delta{t})-i(t)=\lambda i(t)\Delta{t}i(t+Δt)−i(t)=λi(t)Δt
$ J" c J4 k( p/ s. w. g' u
一开始的感染人数为i 0 i_0i
+ ]/ ]- O$ V8 m/ w) C& x
0
$ D( u7 `5 A( `9 g
; l$ W. H) c4 r1 ?% }
% S2 s$ H' q* b7 [; b0 K5 c" b
i ( 0 ) = i 0 i(0)=i_0i(0)=i
$ A1 a+ t7 o+ W- r! c) {1 `
0
4 j- u2 V* W$ I1 Q+ S4 |+ K
- T- Q. e- z9 f9 V% c7 ]% }
1 Y. W; f* W" S) v7 V9 N' X& j
解微分方程可以得到
( ]1 s3 d4 o% ], t
i ( t ) = i 0 e λ t i(t)=i_0e^{\lambda t}i(t)=i
$ @% Z. R6 F+ H2 ~5 S% S2 r
0
( J1 r) s4 M0 `
" ~% \& g$ v% u, y
e
% O. Y- G# _$ f% x8 w( ?7 J
λt
" u3 W2 y4 p2 n+ m6 B
1 b6 x0 k1 F' T! {' T- n% R2 Z
所以可以可到当λ → ∞ \lambda \rightarrow \infinλ→∞时i ( t ) → ∞ i(t) \rightarrow \infini(t)→∞
8 S' M0 z& m% Y% ]; F0 L
当然这是不可能的,因为我们考虑的因素太少了,首先一个是,若有效接触的是病人,则不能使病人数增加,所以必须区分已感染者(病人)和未感染者(健康人)看模型二来解决这个问题
4 h* p: u% @8 H# W" F- O" Z
+ ]) h8 W: A8 L1 ]
. ]# \9 [$ ~" q! {
模型二
/ ~! @' r( T: f: i( N) o2 v6 `
假设:
! m ?- t, b* J# Q y
+ ?- _- p$ V4 W. {
% b6 e, k* L6 o2 q3 D
将人群分为两类:易感染者(Susceptible,健康人)和已感染者(Infective, 病人).
- e5 @6 f/ M; ?1 }
总人数N不变,时刻t健康人和病人所占比例分别为s ( t ) s(t)s(t)和i ( t ) i(t)i(t), 有s ( t ) + i ( t ) = 1 s(t)+i(t)=1s(t)+i(t)=1
" p5 h# a5 G3 C0 I, y. c
每个病人每天有效接触人数为λ \lambdaλ(日接触率),且使接触的健康人致病.
" o$ n: a% ^9 j* d; b# @& { r7 J& M
建模:
; H! {! y" ^# h+ j: V" O
每天新增的总人数为原有的人数乘以每个人可以传染的健康的人数,再乘Δ t \Delta tΔt
; a1 ^5 u$ F& O+ u( E$ \. E- E$ U
1 z; e" n7 g- e, K2 Y1 t7 R
0 i6 L5 h3 Q3 r6 u
Δ t \Delta tΔt除过去,两遍N约分得到下面,
* ]2 {( b) h5 Y, O
3 G& B( p n" w
9 e4 `( _/ S3 S* ?% E% X1 }
MATLAB解一下这个微分方程
* O/ W- U( o* U0 q
7 k2 P* }; p7 [
1 i- M% G9 |4 T* r2 \
y=dsolve('Dy=n*y*(1-y)','t');
* M/ d U5 p& c( Y( p2 S! S P) J
" r* J5 E8 a: c# e2 U# W
, {) z: p; Q+ n; H* V9 S
y =
' ]8 o \$ @9 x$ M& U
-1/(exp(C1 - n*t) - 1)
% o; V+ ?! t$ ~7 K, K7 f; t/ E) |
0
4 b0 A: F! V/ U$ K% K! p
1
; J' w5 N6 e8 h; |0 {/ y V) ]
1
1 Z. Y8 n* I' q
2
4 \8 _! v" s$ s: ?, j4 O
3
4 Z( c7 E: A! h" E0 I* k
4
! L: Z7 u' z6 D2 e
5
* S$ g: P2 i$ S a# y! @
6
7 M7 M- ^/ z4 J" C
写规范点就是这个函数
/ e' S9 N/ q8 V- K
" G9 T v1 @& T, _; j( g
# Y( |. C6 z: V% g' x
函数图像大致为
( C) `+ b2 L& ], ]
9 @6 y, @0 m- a0 }. @; Z( M8 ^
7 y& ?9 y$ n- w _$ U9 ^1 z0 C& W
可以看出t = t m t=t_mt=t
: D1 P3 a9 Q b( O$ F) l
m
$ ]& ?/ k8 M, U( }# B. O6 B$ ~
/ G, h; |" o z3 k: g8 h
时这里图像的斜率有个最大值,其也就是传染的最快的时候,即传染病的高潮时刻,当然t m t_mt
: X! @1 h$ m: O z( g+ K2 @! P x
m
7 Z7 D& k" Q' q _% s: E" q
( }" S0 r; D; t6 T* g: V0 x
是可以求出来的
: V5 [7 i G" ^
# x2 g- e( }! A0 `. B7 E+ m
6 _+ F) a) I& d+ z+ T" y+ `
再看原式,当t → ∞ t\rightarrow \infint→∞时i → 1 i\rightarrow 1i→1
, l- O$ X* @( T& U
病人的比例为1,当然这也是不可能的,因为我们还没有考虑有没有可能治愈,看模型三
" Z1 H% [# ]! w' S' G; z: }
$ e! F0 M7 O* l, ]& G' R+ b
" C, j6 f: C0 a+ z
模型三
0 W- r/ d4 p, U; V4 a
假设:
* i9 {9 J6 S! ^- S3 |3 q
: {& g) Q2 H8 ^$ }/ |
. k' Q, H- k7 F# U
传染病无免疫性如伤风、痢疾等——病人治愈成为健康人,健康人可再次被感染。
! K' d r7 \2 Q d, n& w3 n
病人每天治愈的比例为μ \muμ (日治愈率),1 μ \frac{1}{\mu}
( u5 s; Y% n( z& t
μ
/ Q% K. C" W9 l- J
1
2 t3 { I# L2 v! d6 T; u; u9 |" U
- n5 x) R, k4 \
为感染期,
: o7 b& G& l0 `6 H \
模型
0 s& y' p6 ~$ t7 a3 V) g
这是减去了治愈人数之后的新增人数
8 O# F. e6 l) x1 t
% l. C) F+ s0 G5 i- W1 |1 d
& O$ ?* J0 w z) t6 M$ ^% S
7 Y4 f5 w0 c- c* b+ \( K+ a
; U7 F% U5 ^% Q& {! G# r! t5 V
σ \sigmaσ 为一个感染期内每个病人的有效接触人数,称为接触数
2 O, @. H( v3 w
& v& D# L9 V+ R7 j3 A# s$ Y- y) Q8 q
% q1 Q, t, n8 o1 c; g5 l3 u& O
可以画出上面的图形分析下
: D$ y' `' G! ?
7 m2 }! i. G" c S; T; [
) @7 J; P/ m9 W' K
对上面的公式进行分析,可以得到,当i = 1 − 1 σ i=1-\frac{1}{\sigma}i=1−
}2 U; V9 Q5 Y6 O% c- p
σ
0 M5 d+ Z9 J3 M/ M" ?# x& C
1
. Q/ ?8 z' c8 K T. t
0 g! `3 [* c0 E4 c( Z8 T- H
时,i ii对t的导数为0这也就到了i ii的最大值;当0 < i < 1 − 1 σ 0<i<1-\frac{1}{\sigma}0<i<1−
$ a9 p' U j# H9 i, c) B5 n
σ
* I7 w% \$ Y! y, a j2 c+ k
1
0 O; O `* w0 T5 u
- O$ ]7 \) ?. U' L" T+ A& t
时,d i / d t < 0 di/dt<0di/dt<0,i单调递增,且在d i / d t di/dtdi/dt最大时,i的斜率最大,增速最快;当i > 1 − 1 σ i>1-\frac{1}{\sigma}i>1−
7 j# a1 w4 I8 H% U2 f6 W
σ
) r/ I& R/ }6 n, `1 y
1
. F% a/ G2 @2 a$ [" P- b
& Y7 H# ^& t! b) p0 z/ J5 F
,d i / d t < 0 di/dt<0di/dt<0,i是单调递减的。
2 `( F# X w' `1 ^$ G
. F1 D( s3 |1 v0 N0 D
2 z$ p) E# V `$ O% x
当然我们也可以画出i ii随t的函数图像
3 z0 f. `; j; b' n, s( H
5 M* L. Q6 f* G7 Q* B! Y. \ L1 a1 O
: c& F- T4 |& L4 n; h( Y
先看红线,若初始条件i 0 > 1 − 1 σ i_0>1-\frac{1}{\sigma}i
* P9 }( s! r! r/ g2 O* t
0
4 ]2 B c$ e. x
; N) b7 C: x2 O* c, Z: N) D$ G
>1−
' x+ {4 e3 d& Z! g9 A9 |- O8 [2 ^+ f
σ
& v; p' p+ l1 p
1
2 l$ x! P2 K0 G, k/ b" y8 x
! J8 B) d* u" A# U
d i / d t < 0 di/dt<0di/dt<0,i就是单调递减的,
c1 f7 y: \5 D& {. q
若若初始条件i 0 < 1 − 1 σ i_0<1-\frac{1}{\sigma}i
3 u: b& J$ o; f8 T2 Q6 H, d
0
t- j9 b5 i1 T$ S
$ q% X- W/ ~: _ u, F, D5 [% \$ |
<1−
' C* D# |' h. j" K
σ
) k# ^* _% L. v3 F! w: \' }
1
5 @, D6 n4 q3 y K
' l4 d- T. f: h7 u! C! B
,i就是递增的,可以看到i对t的导数图像有一个最大值,下面的黑线就有一个增加速率最快的一个值,按S形曲线增长
( [. m) V; H: {0 U
: t/ M, Q/ h% F4 t# z2 W% ~
+ c& |% r# r, V
σ = < 1 \sigma =<1σ=<1时d i / d t < 0 di/dt<0di/dt<0 i肯定是单调下降的,最终降到0
, W2 D2 m) e% C' ~8 U
3 f6 u. B* s3 _$ |4 O5 L Y
% L3 j" Q9 J" O( Y! ^
1 s2 b* O0 a4 H( J
2 p) l3 o$ J" d
综上:
3 z- N" V9 T: _0 w! C
想让患病者越来越少,σ \sigmaσ必须小于等于1,即感染期内有效接触使健康者感染的人数不超过原有的病人数.
; f, W! L: Y2 V2 J4 E4 `3 e
& w/ M) P$ i( k1 m, c
1 S- P( ?6 K: ?# l2 X& ^$ M; c
这里我们分析的是感染之后还能感染的情况,但有些病毒感染之后会在体内生成抗体,就不会再被感染了,下面我们分析这种情况。
( j! g Q% T5 J% D
^2 d; k8 M% ^4 }0 S- }
% n& r8 f3 Y$ w2 r1 B! C0 O
模型四 SIR模型
! N! c0 X" s, D8 m% f3 C# t; Y
SIR模型是常见的一种描述传染病传播的数学模型,其基本假设是将人群分为以下三类:
0 x5 q; R# R9 }$ c) B; g2 {
' X7 f. \0 o0 {! U* F+ j) ]
6 h* D) V# A/ b% ^) t
1 易感人群(Susceptible):指未得病者,但缺乏免疫能力,与感病者接触后容易受到感染。
8 _' V% r, i+ ?& `
! w; I, `! [; U4 ~- ~. o
4 f6 N$ p3 D5 Z" z
2 感染人群(Infective):指染上传染病的人,他可以传播给易感人群。
7 ?4 t `- m4 L% f) U- i& u
; h6 Y. j1 S' S, u3 `& `6 K: p2 [
" s1 t( c3 |# ~; T
3 移除人群(Removed):被移出系统的人。因病愈(具有免疫力)或死亡的人。这部分人不再参与感染和被感染过程。
: z6 X& Y$ R$ w2 E( f
: C1 b; V5 H( i/ `
0 A$ S" i2 R9 X/ p
假设:
" r; ?: @5 w3 I9 K$ {# B
2 `8 Y1 Z: R+ J7 I- |: P. c8 f. u
, g' g! t1 m: d8 }% _. }
传染病有免疫性如天花、麻疹等——病人治愈后移出感染系统,称移出者(Removed).
- O6 g& q3 N: w
总人数N不变,健康人、病人和移出者的比例分别为s ( t ) , i ( t ) , r ( t ) s(t), i(t), r(t)s(t),i(t),r(t).
! A1 } C- A5 I. f2 \$ |6 u9 v
病人的日接触率为λ \lambdaλ , 日治愈率为μ \muμ, 接触数 σ = λ μ \sigma=\frac{\lambda}{\mu}σ=
' Z! P+ N) g4 B8 W
μ
- |9 S1 r9 |3 @( R7 G+ d* p
λ
2 C& d. Z) \! Q# \; c/ m* c8 f3 y; Q
3 j5 A, d+ |- q, K/ \4 I+ ?% V/ }+ h2 r+ }
" m) I6 e' t5 T* v/ H
建模:
. Q6 ]- W% D% a5 Q/ s
s ( t ) + i ( t ) + r ( t ) = 1 s(t)+ i(t)+ r(t)=1s(t)+i(t)+r(t)=1
5 O4 `7 [ D2 u R% V' L! F
这个就是病人减去治愈的人,和上一个模型是一样的
8 v% X) v+ z# G) e" s
6 D/ Y* V% Z- P/ f ^
8 G! x1 H5 e! R/ G* z: ?3 S
因为有治愈后是有免疫性的,所以可能被感染的总人数要减少,减去移除者就是
5 X6 z" I# j' l1 d I
/ A1 C; E- r# r* ~
5 D8 L9 J$ e# }* w1 T) K. |( W
将上式化简为:
% z, b, {9 Q3 e9 v
# s1 {9 r+ [7 g7 Z3 W. L0 K& E
9 w( b! F$ z! e6 a5 ?6 s$ Y- X0 k
i 0 + s 0 ≈ 1 i_0+s_0\approx 1i
" M9 [; v( Q* Y
0
. J2 H4 l# }! ~/ K- m
4 j( ]& x: Z: D' P9 H4 I( _% T- [
+s
9 O+ Z; Z" S/ S: ?2 V, i: L
0
9 g. B: f1 a! l9 o$ s0 m( j7 `
+ ]9 b* j# r& W) q0 Z0 Q0 Q) T
≈1(通常r ( 0 ) = r 0 r(0)=r_0r(0)=r
$ W3 l# f+ N( L, Z: c7 H0 x
0
* [3 a& I0 g6 Q
" Y Z* E; w. ]. Z
很小)
' @ H! D. }( \6 i: `0 F# i$ h* T
3 ` v+ f2 o) l4 F
7 S. d( s1 n: c& m8 l
关于i(t) , s(t) 的非线性微分方程组,没有解析解,只能通过数值计算得到s(t), i(t), r(t)的曲线,下面来看下曲线的数值解的MATLAB程序
6 J" l5 `. _4 q7 Z7 b
- E9 l1 I2 z( e$ Z0 j
3 r6 B9 ~1 \+ x' ?
这里我们先设λ = 1 , μ = 0.5 , i 0 = 0.01 , s 0 = 0.99 \lambda =1, \mu=0.5, i_0=0.01,s_0=0.99λ=1,μ=0.5,i
7 G) B' F3 W" O/ V
0
2 C9 l7 y v! E' v
/ J' i3 I8 P/ Q" c, s7 k/ e w! X
=0.01,s
5 M9 @# {! [7 z; t
0
0 S- s+ s0 Z# m; n8 ` {+ }8 v- A( v
& E5 c- Q) v8 V7 q
=0.99
5 i' O6 u. S! c$ F8 y& a
也就是平均一个病人人传染一个正常人,治愈率为0.5;开始的病人比例为0.01,正常人为0.99,设没有天生带有病毒抗体的人,所以r 0 = 0 r_0=0r
1 `: B# }+ D6 C
0
9 q0 l0 ~0 |' L; U/ a2 c! }8 t
0 r2 P7 c0 T$ n" v
=0,之后若果病人被治愈,则具有抗体了,有抗体的人为:r = 1 − i − s r=1-i-sr=1−i−s
4 d$ I1 x$ Q& M. A
& v: } w) Y1 c9 G) J% X: {- z
0 F8 _( l+ T. ~
ts=0:40;
7 m: d9 _& k' B* m8 l/ y! D
x0=[0.01, 0.99];
' O9 `/ M) R4 V3 k8 w
[t,x]=ode45('ill',ts,x0);
* f. c6 F+ x6 s1 g a! e
r=1-x(:,1)-x(:,2);
" e" {/ }% A) H2 P
plot(t,x(:,1),t,x(:,2),ts,r),grid
$ _& N8 _8 z6 ?8 A: V# |& ]
legend('i(t)','s(t)','r(t)')
! _5 c$ U, E, J- x% O) A
. G) T3 w) U# k0 |
C; B. v ^& g, ~: o' ~4 T' N
function y=ill( t,x)
; o$ [# ^$ i4 _% A6 J0 e
a=1;
7 ~: R" T( a5 k
b=0.5;
' t8 b9 W+ k2 @3 d- {* C( O- m- }8 Y
y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
2 M' H% P2 B8 N# M0 A2 _' H# h
1
. c3 e7 u) J; H2 ^" A' `1 Q: a$ y
2
6 V$ ^2 z5 e. k" m) e; f
3
* `9 g \7 L/ d1 d/ w) m; A
4
, Z+ s2 ]" v/ w8 `! i
5
+ I: X; g" r% i% s9 `" D2 R
6
/ s' M! U. i% [* [
7
, t* o' @4 v' v; _% L! \5 @3 |
8
) R! @! O7 G6 f8 ~! T' V% y
9
. y7 \0 }9 \$ y1 ^
10
8 P' C* A6 A& n5 b5 t- S# I. Y
11
' [$ p1 j- H1 a( X) X
% C5 N4 e9 x) ~) `) R8 j
8 g9 O* G& B U
可以看出:s(t)单调减,r(t)单调增,都趋于稳定, i(t)先增后减趋于0.
, O2 {- t* G% t* [3 g
结果分析
$ v, \% f3 l1 _4 C6 m. @. S' H! Q- b
先回顾一下参数
# G8 P8 w' d9 O- b" x- [
接 触 率 λ ; 治 愈 率 μ ; 1 / μ 平 均 传 染 期 ( 病 人 治 愈 所 需 平 均 时 间 ) ; σ = λ / μ 接 触 数 ( 感 染 期 内 每 个 病 人 有 效 接 触 人 数 ) 接触率 \lambda;治愈率 \mu ; 1/ \mu~平均传染期 (病人治愈所需平均时间);\sigma =\lambda/\mu~接触数 (感染期内每个病人有效接触人数)接触率λ;治愈率μ;1/μ 平均传染期(病人治愈所需平均时间);σ=λ/μ 接触数(感染期内每个病人有效接触人数)
; w$ U: d. o" ], g+ [3 ~$ X
可以分析出:
9 f0 t$ c1 {. C
/ i0 x6 `* ]( H, ~+ ~9 T
' B. ~" P$ a/ m
随着卫生健康思想水平高,接触率λ \lambdaλ变小
: B& S/ S7 ?. q3 R& S% K
随着医疗水平的提高,治愈率μ \muμ增大
9 f1 H6 W- d& Z4 p& `* \% |- N
接触数σ = λ / μ \sigma =\lambda/\muσ=λ/μ减小——有助于控制传播.
) v% L( i$ u* M) N( c: U
我们可以试试稍微减少一下λ \lambdaλ,增大μ \muμ,来看下效果
9 X p- |; D2 X
& c& I* X3 T( j8 @% ?
! M- @; v# Z$ Y. e" f1 H
ts=0:40;
1 C8 o( |; v9 E# Y2 u4 S
x0=[0.01, 0.99];
S! p1 K, }, a5 }
[t,x]=ode45('ill',ts,x0);
- [; o5 p" Q/ Z1 ~% h% H; B
r=1-x(:,1)-x(:,2);
( v& \! l8 M" e; B$ ]" N
plot(t,x(:,1),t,x(:,2),ts,r),grid
9 l" U6 k1 D o" x A
legend('i(t)','s(t)','r(t)')
0 t; a0 j: B( F, O
) Z+ k4 n$ `5 M9 O6 k" g7 X" h
1 k9 ], |% ^: h2 N+ l3 d
function y=ill( t,x)
" }% u4 H' L# t1 ?2 Z
a=0.8;
* x o Z/ w Z
b=0.6;
0 n; m. w0 V4 t: E0 u
y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
/ }4 P0 p2 m/ s1 S# u0 V
1
- M$ b1 B4 J0 E) A$ T, R
2
- [3 p- R2 O/ q$ p( k7 p- b' K
3
3 w# n8 G+ \2 b6 |
4
# K" O. Z, Q2 L' [& M4 l! u5 F1 \
5
( X1 o" H+ X2 u3 U9 Y' `
6
' R8 \2 y- c# M3 X3 B0 }) P
7
, L& | h7 ]1 [0 u7 r6 B
8
. ]( p1 l w& g7 c0 v
9
* q) B6 Y5 G3 }4 N0 C
10
: {) ~/ f j3 h# @. M
11
* ^) k& A& `/ `6 v8 C5 F7 A4 m
/ O1 ]# c, D/ w0 Q5 w! n8 c
- i& S# o( c4 D( S1 N
综上我们可以得出结论:想要减少传染病的传播,我们就要在接触数σ \sigmaσ上下功夫。
: y3 b% Q8 p, C3 _% \, L6 r
2 E0 R+ Z) v- b) b3 E# r
0 K4 }, n1 p1 `8 O0 E
实战建模
3 g% m! W4 g! s p: }( j$ _- M' G
数据处理
, i6 [0 T, e; N/ O# L/ T u
) w9 f: A- j9 b1 u
" s0 D* {- a( n2 w8 h# `- o
首先,我用python爬虫爬取了丁香医生官方数据,一共5534条数据 特征包括感染、死亡、治愈的总数,当日感染、死亡、治愈新增,疑似病例,时间,省份等14个特征
# H D) t1 w* N H' Y
4 D+ n7 d! {/ V7 X$ T2 x! `
, @4 f% n3 ^- n% W
" p+ c. p* B' J: ?+ ^! u9 ~' }- ]1 l
4 B& f2 g* ]- y8 ~
然后用python进行数据提取,提取了较为典型的湖北省的数据作为我的参考依据
3 W. }3 d' G# [/ l6 z; E+ x
" r' V- f0 f. @
' }, C) w; F. _. \2 Y# d0 M
( ?/ V( }( m8 q& A
; e$ d4 Z1 ~) ]7 q( {
然后用python对数据进行清洗,提取出了患病总数,现存患者总数,死亡总数,治愈总数,时间,省份这几个特征
_/ o9 J; j+ u) V5 ?7 l% `3 j& e
" a3 U; D% u& a2 O9 O, [5 }
% t. }2 I) ~% D P' l
对日期格式进行修改,值保留月和日,并与死亡人数的位置交换
! d, @1 j' Q* [/ O" w$ o
: @* G7 ?; f. Q3 X1 o
" t2 a& v" Z, M) H$ `3 S
这里我用python对提取的四个特征分别进行了数据分析(主要包括计算最值,平均值等,),并把1.20日作为第一天,7.02日作为最后一天也就是第165天,做了可视化可视化处理。
9 H1 @7 ^' C* S/ F3 @1 r: ~
感染人数示意图
8 C0 W+ ^: H Q' b
- h# x( T! J6 v8 U+ U m
) M# c2 L6 ~, w `7 R' R( K2 R
治愈人数示意图
) ~/ g4 l6 z/ d- t7 v
& c I- n. o! [! [3 u
( y5 Q6 [) o8 `. E
* x* I6 U/ \. s4 ]3 Q3 s% ~
% p" }& O$ }) R8 p( Y. n' R% ?
现存患者数量图
P% l2 P+ c' m5 p& m
5 S" o, P. T7 Q% d* K( q+ Z5 R/ h% Z$ m
7 I: l& }0 X8 O" {
死亡人数示意图
# A8 V5 O! o5 q8 w3 r# e/ U7 }
* O' c* c H) E
: o! _+ Q- n" O
/ o6 I4 v% l" [% F/ Y e! s
- J6 j7 P' _# h# C! p4 a2 l8 l" U
经过上面的图片与describe数据分析,我们发现有一天是异常的,患者多出了平时的十倍左右,经过查阅资料,这天因加强了检测标准,所以增多了很多。为了避免这个数据的影响我们选择将这一天删去(或者用平均数或中位数代替也可)
+ E0 N& u8 M0 a; ?6 Q
将上面清理过的数据存放到csv文件中
9 e9 w/ c; y6 W( f
, o$ n% G$ r1 o9 m5 ?; R- z
# ~' G; ~" e5 F* r4 V8 b$ c
模型建立
, K* R$ ~4 C- @/ m5 f$ w& Q4 G. ~
模型假设
9 x: t# z7 J3 J7 @" Y
经过上面数据的分析,我们大体可以进行如下假设:
% f; r! B1 D0 ^/ e0 J( ^6 m, j) H
1.由于不存在封闭情况,考虑开放体系。
+ E- k1 J$ o' i) c. f/ N* r
2.目前数据以天为单位发布,因此不考虑连续变化情况,只考虑离散的方程。
4 ~% N4 i$ Z- ?8 Q' [5 O8 p8 x2 p* D
3.新型冠状病毒的治愈人数和死亡人数相对较 小,因此只考虑 Susceptible(易感)和 Infected(感染) 两类人群。设易感人群总数为N
/ v/ q% v' j6 N
4.经专家鉴定新冠病毒患者治愈后至少六个月之内不会再被感染,所以设治愈后移出易感人群。
/ U( A+ V8 v$ \0 U. y- h/ }, y
5.设每个病人每天有效接触人数为 λ \lambdaλ(日接触率),且使接触的健康人致病.
9 e; }. }7 X) u) L: I
6.设病人每天治愈的比例为 μ \muμ(日治愈率)
: ?1 q8 S8 b$ q; V
7.时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t).
8 y6 n) u- q& n5 t) N: C7 x' r9 o; R
' J6 H# Z! c r+ L8 L3 ]
- _; N1 ]4 U d r0 G5 z
模型一
& T* Y9 ]% G: D6 }& x" ~5 J
- u$ x! d- B# S6 ~7 z# F; [: G$ }
$ ?# z8 z) k0 ?
分析可以得到移出者r(t)=治愈人数+死亡人数
8 R1 n9 d# }4 I8 L5 p
通过python数据处理,我们算出了r(t)的值,并将其可视化
8 C4 P/ n6 s& d& ?1 L, s. U
+ r$ ^! J& X7 ?6 W2 T4 Q1 _
# H- K; l g" E1 v5 ]
- Y$ h$ t5 m) s# E
9 w: b: U U! b" W0 w$ |6 `8 t
我用MATLAB对其进行了拟合,拟合图像为
4 U3 B4 Y/ f4 l* |( D$ D& o
: a+ z* s& Q( O/ c6 Y ^/ @
& I: y, _8 }7 @( ^* o9 U& \# v
& t0 \) v* [) R
6 L) `4 w) w- [5 k! O" q
6 I4 m( V# X7 c9 w/ g. P
* u( f* K* \9 a( U/ F" s
分析可以得到患者 i(t)=患病总数-移出者
- ?4 u* l% X! P
可以通过csv文件的currentConfirmedCount 直接获得i(t)数据,当然也可以通过 i(t)=confirmedCountv - r(t)获得,对此我也做了可视化展示
5 t. y, n$ j3 W0 @$ }3 B9 ]. R5 n
1 q. T; x3 j4 e6 E2 s& U1 k r' v
; c: ^4 t8 W8 g
通过MATLAB程序对其进行拟合,可以得到r(t)的函数图像大致为
' _2 R/ f c9 | G
$ m9 e8 A7 g& T1 L6 Q
6 f0 S) T) T' X
( x+ _6 @/ @( a% G( W/ Y* @- b
6 u6 U1 @! C4 ~, w+ ?1 L' s2 e
P4 y3 z$ i& d; [3 E7 \
" k! }% V# Z# l7 q4 ]6 M
为了方便,利于公式推导,我们先设时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t). 所以有
/ g, E0 y O T& E: h, q/ I
' {' G6 G! j7 [% @+ N; D- x
* ~! U: G( h! n4 a4 K
可以推导出每日新增病例的表达式
2 p' d7 X; C' n6 g! G% r6 |
" a0 R2 ?1 T! V2 K- R1 ^ B
$ @) N! [2 n! f+ U/ C( D9 r
+ Y& a y3 b- i: A# m; ?& m
8 \* a' ]7 d2 T
; L$ K" [+ P, }. I3 v
6 C" u; l" c# e @" E, B# G
由以上两个公式可以推导出以下两个微分方程
# _8 Z) b! O7 |8 j& ~
9 ^4 E3 A4 ]. d
7 C9 F0 Y9 C* |
& e9 i' A( `, Q6 e
7 I7 ?( @1 i5 u
可以知道初值
7 b/ H8 q- f0 l5 q7 b
i ( 0 ) = i 0 . s ( 0 ) = s 0 i(0)=i_0.s(0)=s_0i(0)=i
6 K, W$ S- z6 g6 q
0
/ j$ m- _+ P4 F/ d/ ~6 I. D
; A1 s4 _( w* ^! Q
.s(0)=s
9 ^; c# m8 v o6 E6 z' H
0
( M% C( ~' e, _/ R; Q
0 T0 Q' D8 Y- W# A
$ z+ Z4 o$ y7 n0 `
因为一开始治愈的和死亡的肯定很少,所以r0可以看为0,于是就有:
/ i2 ]' Q% N( i. e# T5 z
i 0 + s 0 = 1 i_0+s_0=1i
" l# V! N; d. I. J
0
3 m1 H0 Z; _3 y/ M, H
' ]" J/ ?- j+ B: \' \6 U$ j
+s
# T$ ^0 k) O4 g ?
0
% _, z! _6 r% W& n& Q: k
- y7 R# q+ H4 Z/ P2 k9 N* i/ `$ P6 Z3 |
=1
% C1 l [3 L3 l$ A% S
通过解以上微分方程我们可以根据经验假设λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)的值分别为1和0.5(也就是每个患者可能使1个正常人患病,患者可能有0.5的概率被治愈);由于一开始患者肯定比正常人少很多,所以我们设i0=0.01,s0=0.99。对其求解可以得到s(t), i(t), r(t),的变化图像
0 q& b# X. f/ t- P1 w' G8 N7 j
) \& A0 O! i N* ~# u' \* E
5 S2 j" M. r+ c2 z
0 l @/ U. N% u# g! d
$ `5 s0 V+ n O' K- `2 I
MATLAB程序如下
# r% }4 a( \" Y+ w
ts=0:40;
, {6 s/ e5 W% ]2 e
x0=[0.01, 0.99];
% Y" f* t5 Z, l
[t,x]=ode45(‘ill’,ts,x0);
1 X$ G/ P# C; U7 ~' V
r=1-x(:,1)-x(:,2);
( s% P' q% l d$ t, `
plot(t,x(:,1),t,x(:,2),ts,r,ts,x(:,1)/x(:,2))
0 r% D4 q' \+ r% n: M. P
legend(‘i(t)’,‘s(t)’,‘r(t)’)
0 ~, F$ m/ _: E+ `) V
6 D8 m+ Q7 T5 @0 G K7 F
1 o i3 R! U# G1 u7 k2 H
function y=ill( t,x)
% Z" G" J4 h1 b5 {6 r& ^3 E
a=1;
" i9 f3 z- w4 J9 @/ `
b=0.5;
) n- P! z/ i, ^9 k4 J9 q
y=[ax(1)x(2)-bx(1);-ax(1)*x(2)];
# I( @* ]/ v4 Z+ ?
% E2 j( |* h0 `* {' m
) z8 x/ T, U3 p. l& A2 x3 W6 ]
结果分析:患病人数肯定有个高潮,但之后高潮就会减弱,并逐步降低为0。随着医疗卫生条件的不断提升,患者的 λ \lambdaλ(日接触率)肯定降低,μ \muμ (日治愈率)肯定上升,所以我们可以把λ \lambdaλ调一点为0.8,μ \muμ调高一点为0.6,可以得到以下趋势图。所以应对传染病很关键的一点是我们要提高医疗卫生条件
2 m% ~. c) O3 u/ W& ?
2 F8 X. ^* @3 B7 C @$ m' Q
- M2 I; P% U% M' q
/ u- f, G s) z9 I* i, @. [. ]
模型二
# L' O3 e' ~6 B5 n
! ^8 i1 N) n+ j1 j# T9 r
2 F* b7 R3 O0 k/ O0 N, }
实际上,λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)都是随着时间变化的,这里我们设s(t), i(t), r(t) 为第t天健康人、病人、移除者(病愈与死亡之和)的数量, s(t)+ i(t)+r(t)=N..
- I) n! V- r- c. j0 L6 U% Q3 ?, c3 r
(t), (t) ~第t天感染率, 移除率(治愈率与死亡率之和)
$ @) D' ]: P5 m6 c3 x
有 d i / d t = λ ( t ) s ( t ) i ( t ) − ( t ) i ( t ) di/dt=\lambda (t)s(t)i(t) - (t)i(t)di/dt=λ(t)s(t)i(t)−(t)i(t)
/ U: J: ?3 o1 t7 {8 b
因为s远大于i, r,s(t)视为常数,所以有
' u8 M8 q# A( z& |
9 w3 ]- r, S; s9 Z4 C1 |
3 R- v# | [) u6 _1 s0 G u
' G# _! D) O, ^* W6 b: v( q
# z" z7 Y' `9 d6 B% t3 c8 l j( S
取差分近似导数
* j( j" e7 @0 i8 F0 Q' X2 F
# n$ b" b7 _0 d% d& F) G( L
0 r/ i( K" ]" I) Q$ U
, \" u3 N: t: z
9 Z$ \- @& f; E* O" _, D7 p* C
我们可以先用真实数据对(t)进行展示并进行拟合
1 f, G) r0 B6 }; W) }# \0 p4 n
4 L' I( C7 O6 X: @& t/ l4 |) ]) H
8 `# k8 M4 s+ w# R
; f6 n3 k7 y8 S0 E. t
7 i8 }- ^2 o' I5 ^* V
当然同样的方法对(t)进行拟合
; f: O4 Y4 m; u% {- k- z0 n. M
# C0 ~1 j E1 R& G1 q* q
6 e4 ^5 [) f( o" K! ]7 T
做不出来了,好难,光这些东西就弄了四天,到了数学建模国赛得多难多累啊,哎,让我这个小白手足无措。毕竟还没有正规的培训,这个模型等期末考完试一定好好做做!!!
% ]* [" O$ R1 r+ A& e& r
冲国奖
' K& \4 e/ a7 b" e: \$ E0 @
冲国奖
+ f; N) v _1 K/ o5 }! ^
冲国奖
; W8 a- |! m2 q. z4 m2 ]0 M- S+ |
————————————————
2 D% l+ ]9 ^7 G+ Q% h9 a
版权声明:本文为CSDN博主「小白不白嘿嘿嘿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
9 O( Y$ v, `0 u9 G. V/ j
原文链接:https://blog.csdn.net/weixin_45755332/article/details/107094630
6 \: t* R: n/ E4 R# b
8 w9 L$ V; p2 [
, Y- U$ Y1 L# l0 v7 [8 h
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5