数学建模社区-数学中国

标题: 数学建模之传染病SIR模型(新冠真实数据) [打印本页]

作者: 杨利霞    时间: 2021-6-22 15:35
标题: 数学建模之传染病SIR模型(新冠真实数据)

# A- |0 i4 P; E- K3 l5 M4 ~  V* l3 H数学建模之传染病SIR模型(新冠真实数据)+ r6 s& y! A/ T8 s& Q1 i
传染病模型的基本问题5 a& J0 j0 N- D( J* `
描述传染病的传播过程8 q" O& V5 z, [' `
分析受感染人数的变化规律6 X& J: ]* K6 u# p( T, F
预报传染病高潮到来的时刻
$ X( O7 Y2 I% C/ N: p预防传染病蔓延的手段% f2 k8 E6 c5 v. S
按照传播过程的一般规律用机理分析方法建立模型
1 k7 d9 }! c# a# A1 b& y注:我们这里是介绍数学医学领域中基本的传染病模型。不从医学角度分析各种传染病的特殊机理,按照传播过程的规律建立微分方程模型.7 e  m5 _0 K! @( l0 O1 w5 G

+ O! H2 V; T( P
/ h' R8 z  P9 ^
建立模型
% m3 J4 \) q- @- a. J4 D模型一( ?  A6 o3 s7 e* I- y
假设:
7 c, c; s* @- z: p  R8 u8 ?; W' \7 j  p
6 S. ]  E7 W4 f4 D
设已知感染人数为i ( t ) i(t)i(t)(病人数量随时间变化)
+ B& c- u9 \3 V- }- Y5 j" D7 H设每个病人(单位时间)每天有效接触(足以使人治病)人数为λ \lambdaλ
( u0 T. ?1 L. b& o5 _( x, T模型:
. H( u& z4 J2 {' j6 t单位时间Δ t \Delta{t}Δt内,新 增 的 人 数 ( 现 有 − 原 有 ) = 原 有 的 × λ 新增的人数(现有-原有)=原有的 \times \lambda新增的人数(现有−原有)=原有的×λ,即5 r. f/ i# P3 }, n3 g
8 J  R; ~4 S6 g$ y

. {' T# H8 j' y- y( Xi ( 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% Y1 e: A% t6 [/ z/ X8 {: I
一开始的感染人数为i 0 i_0i
+ z% v# o# E/ f$ {: s0
1 L- T) ]6 V' m  U- Q7 |  c​        ' ]& W/ E( q! B  S; R5 Z
- a8 R9 M7 q% w8 W0 w9 I
i ( 0 ) = i 0 i(0)=i_0i(0)=i
/ C4 E, }) C0 v9 D* x4 z/ k0" y: |/ {8 x* z, l. o, P5 v+ Z( G
​        4 U. ?" r4 z$ o- i
' z. J5 f( u; G* _6 f0 |
解微分方程可以得到8 y0 T# }) z  [$ ^# ?
i ( t ) = i 0 e λ t i(t)=i_0e^{\lambda t}i(t)=i 6 A. _: j- d0 n; N2 s  i, U+ B. @3 F
04 n( a7 q& N! b' l  O4 S
​       
$ f; h+ R, n2 R3 e1 j e
4 q" F3 e: k* Aλt
# v- I6 I' v) F6 _! Y
4 e0 i9 [4 j# U. Q4 G6 Q2 }' B( ]所以可以可到当λ → ∞ \lambda \rightarrow \infinλ→∞时i ( t ) → ∞ i(t) \rightarrow \infini(t)→∞/ G" t' ?" `7 \, T0 Y
当然这是不可能的,因为我们考虑的因素太少了,首先一个是,若有效接触的是病人,则不能使病人数增加,所以必须区分已感染者(病人)和未感染者(健康人)看模型二来解决这个问题
& I# _; E" q6 u9 b1 w
9 \8 O: B1 L7 `# i' [
" v, m- ]& r' q! U
模型二
. U% r. x/ j0 I/ H* Y1 |$ E3 {假设:) K3 w6 G% ]" M7 m3 p
' @' [- {, u) k0 @. g# r
4 Z2 N" O3 N. u' J7 V* F' Q, y4 M
将人群分为两类:易感染者(Susceptible,健康人)和已感染者(Infective, 病人).
* K2 p/ X) T- U* M* a0 [9 P& W总人数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)=10 c! L5 v: I" P- i
每个病人每天有效接触人数为λ \lambdaλ(日接触率),且使接触的健康人致病.: @& @. y0 A. |& S2 d$ @
建模:2 o5 k) L! P1 l# M  T
每天新增的总人数为原有的人数乘以每个人可以传染的健康的人数,再乘Δ t \Delta tΔt0 c/ D% c* s( F9 c+ {. `1 {
4 Y1 c# Z" p0 N0 i( P

  \5 l: Q4 Y; V2 c' w' X0 EΔ t \Delta tΔt除过去,两遍N约分得到下面,9 q# F. Z7 X* h  D. X; i4 ?- X

7 `# A  G# p' O1 f; A

" Y0 w: o2 C7 f' S$ IMATLAB解一下这个微分方程
8 ^. [- W! I/ F4 t9 c
5 A* U/ I# S* f, I/ N
$ n! ?! _- C0 Z2 Y+ T( w4 x
y=dsolve('Dy=n*y*(1-y)','t');
: P/ @, u% z* h& ]+ _( l6 K* h# p( Z' b( j9 E1 ]0 A6 R& y8 l
9 _) |) L& b8 _# T% ~/ E( ?
y =3 G' o: p+ |+ c2 n* b
-1/(exp(C1 - n*t) - 1)& S, s, j2 O) c. ^) `) T8 U! {
                      0
& h( q% Z* g2 z                      1
/ X# z4 \  L6 f1
* _  c) B+ }' E+ d" C. O! U2
# L& A0 x  r  F* Y5 {* }3
! ~" h: l+ G' A$ c* x4 ?) x+ r4% y( N/ O# h+ u: D
5, B& l& [" `0 ~  ?  J; N
6
5 U" N% S5 s3 y写规范点就是这个函数& U; [8 m' R# C

1 s( h! e# K& T: t9 y" V% Y$ N6 |
- r* F  t% |) g, x; @
函数图像大致为
- h9 A; K9 d) V' j; ]
9 M9 _2 {1 a- y$ \) p: Y4 u

( m$ P" N9 b7 \! z9 X2 `可以看出t = t m t=t_mt=t # p- ]1 e3 Z# H# }
m, A$ b6 d" x7 g5 E
​        3 J8 y5 m; n8 |: L4 f5 s5 @
时这里图像的斜率有个最大值,其也就是传染的最快的时候,即传染病的高潮时刻,当然t m t_mt
. ]& |; c; L: {5 Mm
# o  {' R- I; g' R​        0 @1 o# v( z' [& P2 w
是可以求出来的
; y8 R: r- D; H& w5 c* ]
+ Y( h- j0 @0 y' ]

% y$ d5 S' w4 Z再看原式,当t → ∞ t\rightarrow \infint→∞时i → 1 i\rightarrow 1i→1
2 k3 W" N3 l  p- M8 ~2 V+ x病人的比例为1,当然这也是不可能的,因为我们还没有考虑有没有可能治愈,看模型三
3 D# ^3 p6 |- Q6 C# ^9 \2 i3 a+ q' q
: v( J5 b' r- Z& `1 M

+ Y0 s2 r+ S0 D5 f模型三
/ R5 U& v: _9 c+ k6 q; K5 w! G& S假设:
0 p& L1 y/ r: N
7 l1 H' I. Y# p5 E8 J. x1 c
3 t9 I" j6 K. x: R& U0 R. {
传染病无免疫性如伤风、痢疾等——病人治愈成为健康人,健康人可再次被感染。7 u- w7 B; z  B% N
病人每天治愈的比例为μ \muμ (日治愈率),1 μ \frac{1}{\mu} 3 Q* Q; O. H8 P/ N! T* l
μ+ B' ^6 V" W1 P! t3 V$ E! i
1* I4 _2 l1 k5 n/ V! \- l. n- T
​        ; ^% J3 j1 |$ T6 [7 ]
为感染期,/ M7 A4 b0 B6 c9 m. n) E6 J/ H$ ~
模型- |+ @6 \$ r- g: m) v& p4 D$ \  x
这是减去了治愈人数之后的新增人数
# S" a5 t2 k% N/ \6 a+ [
! J3 a& p% N" ]

0 Y% ?* P8 C" C) L& u. j" Y3 n, V) O& A& y* U8 u

2 [3 s7 b3 ?; `, B1 dσ \sigmaσ 为一个感染期内每个病人的有效接触人数,称为接触数
, J9 B0 z& y( [0 q- l/ T8 T& X$ D) b. e- m0 k4 ^& F+ s

% z4 W7 ?5 }5 x+ r0 H$ F- z4 a可以画出上面的图形分析下" j; V& g4 w5 M( G! i' @& h0 n
; W9 d. L+ d6 y. ^1 Y

+ q" F7 z, e, {对上面的公式进行分析,可以得到,当i = 1 − 1 σ i=1-\frac{1}{\sigma}i=1−
! v7 A6 d6 V* f+ B" e6 Xσ
9 D! v6 S' a5 o% e1. ~" d4 m* K/ F+ m# Y. W3 P' K$ a
​       
- W' |% D1 j. L! b; A8 I 时,i ii对t的导数为0这也就到了i ii的最大值;当0 < i < 1 − 1 σ 0<i<1-\frac{1}{\sigma}0<i<1− 2 |1 ^2 y+ I! `' B4 O$ n
σ1 I$ v% Q0 n1 n7 T
1
! E, J9 X7 n$ L3 P4 M* Q1 B​       
6 z. t9 B( `! M 时,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−
; N, M" H+ @2 y7 f. C5 X, ~1 Cσ
1 n6 w4 a7 a& V/ L1; _; c) g% x6 H. `) c$ H- A1 a* C
​       
5 [* j6 u1 Z& d- c% H5 v ,d i / d t < 0 di/dt<0di/dt<0,i是单调递减的。# t$ w' _' y+ a9 R8 k9 ^
- d+ r. Z, J4 p( x

# j4 m: C* f$ s) m# S# J# W' o当然我们也可以画出i ii随t的函数图像
: Z+ F0 P+ z1 v7 O' S( V: f$ f2 n

) z2 O( K; O2 b, c% f/ J; z先看红线,若初始条件i 0 > 1 − 1 σ i_0>1-\frac{1}{\sigma}i - R8 i: V( ]# j1 l! s7 K# ~* W
0
9 C6 v0 S& f; Q+ n​        & Z4 K  a  V0 D5 e" W. e
>1−   j* K- c' z. g
σ; f. H0 C% t- L9 I/ G" \( W3 {9 U
1- v: B1 {7 ^/ c1 s: q. F) v3 u4 x7 V
​       
) n; R7 _; g8 Y) N9 N d i / d t < 0 di/dt<0di/dt<0,i就是单调递减的,
- w0 Y9 b! O% q0 r! ?2 i+ e1 o, \- M+ p若若初始条件i 0 < 1 − 1 σ i_0<1-\frac{1}{\sigma}i
4 M9 A: a2 J' F0 B0/ a. d# f3 H( b  R) |' j
​        + @# }& G; K  ?- ^8 V1 V- Z+ m
<1− " `8 p4 V- e- U$ L; |, t
σ
: Z% s+ G( ^% M, {% a1: g% V- H1 E8 f
​        3 q# ]/ D7 O' x. N" Y3 d
,i就是递增的,可以看到i对t的导数图像有一个最大值,下面的黑线就有一个增加速率最快的一个值,按S形曲线增长9 l& J' a+ ^, G6 F% A+ E
3 ]# c; x+ M. Y% N7 e

3 A3 \) ~4 L& a8 {σ = < 1 \sigma =<1σ=<1时d i / d t < 0 di/dt<0di/dt<0 i肯定是单调下降的,最终降到0
+ U$ B' L) t/ M% d" }3 E3 v; Z& R& Z; o

; i1 ]0 K7 R* S9 k
# z- v" K* O+ Q) }3 j/ b

3 L4 ]' g; W, X, k% g3 A" P综上:3 d) \* x* i! ^% o
想让患病者越来越少,σ \sigmaσ必须小于等于1,即感染期内有效接触使健康者感染的人数不超过原有的病人数.
; I6 y$ o: V  ?
$ b0 `  m" V/ a) M4 g
( Q( J1 A  I0 d7 V
这里我们分析的是感染之后还能感染的情况,但有些病毒感染之后会在体内生成抗体,就不会再被感染了,下面我们分析这种情况。' i, q- U' J" k9 n2 M, q# g$ k8 s

6 r* f7 _! s3 N* u; y) Q

# y) B/ O3 Y, q3 k1 c模型四 SIR模型
, w, m4 b2 K3 n9 r1 Q5 r7 @- aSIR模型是常见的一种描述传染病传播的数学模型,其基本假设是将人群分为以下三类:/ H& A/ G: k0 p1 M9 [' y
* }7 i8 o% v" O" G% D1 o5 W# m2 W6 S

" o; k# j, b( ~" ~2 z. [, r1 易感人群(Susceptible):指未得病者,但缺乏免疫能力,与感病者接触后容易受到感染。# J3 I7 [/ O* f
" [# r6 h: r# i9 L* o$ h/ K

5 h! ^4 P* X) w+ Z: F5 H2 感染人群(Infective):指染上传染病的人,他可以传播给易感人群。
1 ?/ n, @+ v. z) c# E  F+ i! H, V% X
4 B1 n) F# M9 w* k8 x' ]$ K

5 o+ W9 ]4 b  H3 移除人群(Removed):被移出系统的人。因病愈(具有免疫力)或死亡的人。这部分人不再参与感染和被感染过程。
* O  |# v4 H& g; ]5 M- O
* `. m7 G4 L4 w
+ e6 z$ u. k3 Y# k2 l
假设:( ~/ H: e- K" p2 ]* U

* B/ d- X2 ]2 x% K6 ^, d

0 ?4 ~2 `4 ~) y& {; l3 y, w传染病有免疫性如天花、麻疹等——病人治愈后移出感染系统,称移出者(Removed).
( V8 K7 H6 O. {, `; \9 P总人数N不变,健康人、病人和移出者的比例分别为s ( t ) , i ( t ) , r ( t ) s(t), i(t), r(t)s(t),i(t),r(t).
$ M) F) g, S* I( b6 A  z6 |病人的日接触率为λ \lambdaλ , 日治愈率为μ \muμ, 接触数 σ = λ μ \sigma=\frac{\lambda}{\mu}σ=
. a% H5 i% y" x  R' e( @μ
# b6 ]4 S1 W+ K& @: k4 _2 Bλ
& G  Z( ?2 s0 q2 F6 @0 M​       
6 A  v' y5 R% s; o1 K& m # v. t4 e5 @$ w9 f6 F6 p! d
建模:6 @* L- b! ?; x$ L, Y4 {! }
s ( t ) + i ( t ) + r ( t ) = 1 s(t)+ i(t)+ r(t)=1s(t)+i(t)+r(t)=1& @, T2 b1 g  q. i& i) j& Y( c
这个就是病人减去治愈的人,和上一个模型是一样的
1 m; P5 k& r$ A, v
5 W5 b, B' p; M

( L4 x4 B# i3 }8 R$ v因为有治愈后是有免疫性的,所以可能被感染的总人数要减少,减去移除者就是
# w! Z$ c2 A: a0 n) Q4 P
% M. g& G, V4 |2 e$ l
4 B& ^3 e7 D7 s  S+ G  M# p
将上式化简为:- W( n8 A5 P1 W* X" |6 e

/ F# v2 e/ q6 j9 o- |' E& ]

- c+ Z$ I' A1 u; {i 0 + s 0 ≈ 1 i_0+s_0\approx 1i
" t( Y* o2 e* @6 F( U% `$ r$ n0( p; g6 t  y* o
​       
  R) C6 N9 K& E7 c! ] +s
& q1 a- D: ?: a5 |. |3 Z0. e" l6 Y# m2 R3 m" A* l, }5 g
​        9 }" p% @4 A: K7 j- @/ Q2 a
≈1(通常r ( 0 ) = r 0 r(0)=r_0r(0)=r * l  B1 C$ `5 H* S1 s2 b0 p% T% U
0* G0 P: s; q! l/ o
​       
6 f8 q: E' N3 @! v9 J: l( j9 b* ^ 很小)
  K- x/ \2 N6 o) z1 J+ L3 \. x4 W
: y# e  J$ Y9 Z7 H" [. o' G$ c' `
4 P& Q0 Z* q' S) w* R
关于i(t) , s(t) 的非线性微分方程组,没有解析解,只能通过数值计算得到s(t), i(t), r(t)的曲线,下面来看下曲线的数值解的MATLAB程序
$ o- W, D$ [! Y2 c
0 s9 F' V9 B$ P* y$ F
  ~1 F" W$ z! a# T
这里我们先设λ = 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
# l+ B, E  g- _9 i3 ~0
4 H6 ]" y  F% o" d3 U/ g​       
' o4 d# }5 j  d# ^ =0.01,s
, A9 [" O3 |2 X0
" \- ^* z' a! z. G' s" ]& S​       
- T, R+ a( Q" T6 m =0.99
6 s2 P" j* T3 _+ w也就是平均一个病人人传染一个正常人,治愈率为0.5;开始的病人比例为0.01,正常人为0.99,设没有天生带有病毒抗体的人,所以r 0 = 0 r_0=0r * w3 a4 b- l* K
0" f" m/ i0 ?# h( l0 s9 _* u
​          ~* H% `5 i7 y6 _1 b
=0,之后若果病人被治愈,则具有抗体了,有抗体的人为:r = 1 − i − s r=1-i-sr=1−i−s
0 h% S7 [  \. d2 j# j
5 }3 M7 e( C+ H$ b& m* O; r

" h- v: d6 w6 f: Ats=0:40;
4 P+ Y+ c* F; nx0=[0.01, 0.99];
7 l# Y# s9 g, A% q$ H1 b4 A[t,x]=ode45('ill',ts,x0);
5 Y! Z) g8 A: |. e9 I9 _r=1-x(:,1)-x(:,2);
$ w( T# ^, B+ {& s* Bplot(t,x(:,1),t,x(:,2),ts,r),grid# p6 g1 \1 e$ q% ~9 P! ^# Y
legend('i(t)','s(t)','r(t)'). q9 v. e- v; S( z
$ \, N" D) l* k2 M9 J

1 Q6 l2 {+ H5 j0 v8 Vfunction y=ill( t,x)
- X6 |& P0 y+ Aa=1;- h  ]9 F5 T4 ^& Q
b=0.5;
$ E# I! |9 c+ r5 e; {# u7 Ky=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];1 t( p: G; }$ T; ^4 z
1, `0 B. E, ^) D
2
0 c2 w& S( q* ]- {! y! J32 m5 q8 }! [: P0 k. e- [
4
) R! p5 s# `' w58 F, T/ y0 k$ F  k5 S# R+ z
6: [) a, W9 T% O) I6 p$ E3 U
7$ O3 K1 Q1 u' C5 a/ q& _5 u& G! L
8
2 y0 U( ^7 b# j; B- r, G2 {7 T90 L# C4 K, \& {+ x. U
10
' n; G/ w% K# D; F1 D  e3 A+ W11) L7 K  Q5 i/ |2 L& u% f
! Z3 S& p, n1 h6 q  f; a; ]$ Y
+ J/ u) N1 M1 v% H7 N8 x$ X
可以看出:s(t)单调减,r(t)单调增,都趋于稳定, i(t)先增后减趋于0.3 G: S$ K4 K* D  W/ o
结果分析/ K) t! \" ~# g/ b. S# K" }* R* P
先回顾一下参数
* L/ f3 P) y5 Z% T! K/ d0 A% i接 触 率 λ ; 治 愈 率 μ ; 1 / μ   平 均 传 染 期 ( 病 人 治 愈 所 需 平 均 时 间 ) ; σ = λ / μ   接 触 数 ( 感 染 期 内 每 个 病 人 有 效 接 触 人 数 ) 接触率 \lambda;治愈率 \mu ; 1/ \mu~平均传染期 (病人治愈所需平均时间);\sigma =\lambda/\mu~接触数 (感染期内每个病人有效接触人数)接触率λ;治愈率μ;1/μ 平均传染期(病人治愈所需平均时间);σ=λ/μ 接触数(感染期内每个病人有效接触人数)4 C! {- B5 O9 l$ t0 N# J. \
可以分析出:3 o3 g$ F- s+ t. o1 |1 ~! y- T% c! q
) [% H# ?1 x) F& A4 M7 w

) ?# D7 b: e, }; N+ O- `( o随着卫生健康思想水平高,接触率λ \lambdaλ变小
# v. Q1 |& e) `  Q随着医疗水平的提高,治愈率μ \muμ增大
2 e3 l& w* {1 b, {接触数σ = λ / μ \sigma =\lambda/\muσ=λ/μ减小——有助于控制传播.9 Q+ E; C' w4 c$ L7 Y6 f( T+ }
我们可以试试稍微减少一下λ \lambdaλ,增大μ \muμ,来看下效果% R# _! H: w( D% s* v$ g) C
% R! P7 d& _8 b

9 s9 J, ~# z. Z0 u0 Hts=0:40;
; }( e. `/ T: K8 X2 |x0=[0.01, 0.99];
7 V& V) m8 R) K/ b9 e[t,x]=ode45('ill',ts,x0);/ a! R3 a: O# O9 Q
r=1-x(:,1)-x(:,2);
; Y) w* x$ Q/ Y/ v' j+ I7 Fplot(t,x(:,1),t,x(:,2),ts,r),grid
8 B; w& h' V1 f4 U* r5 r# {legend('i(t)','s(t)','r(t)')
  ^0 d$ q, A& n7 [
( z5 e* w4 p- l- o8 h* g
8 K& `: Y! m; o
function y=ill( t,x)0 W. o9 }6 ^0 L. }
a=0.8;/ v7 v, [, j8 i6 ?* }
b=0.6;
! F) s+ Q) R2 T7 x' M1 oy=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];# ^/ Y) V2 Z0 c" d6 ~3 {6 y7 O' Q
1
6 y6 W  s* W! O1 q2% H* ]- `: j. W( F% J) W$ e
38 V4 q0 q3 p; B+ H1 ]
4! T' n0 }! y" K3 j! Z7 {
5+ B) E" D" I$ Y
6
9 o8 {, H8 P) x3 g5 }1 Z7
) H( W8 E/ g. B8$ d5 s5 x6 e0 C, w7 R4 q
93 Y! Q& C; ?) b* y8 Y3 a
10; V! E7 _$ S# V# ?" m
11' J, C. ?  d, C6 D8 U

, Z5 `: E9 o* h5 }; V* S

- d7 A5 H# @. V3 n综上我们可以得出结论:想要减少传染病的传播,我们就要在接触数σ \sigmaσ上下功夫。! n# e. H0 u3 Q! h# k, U

, f. \% ?3 Z: C( E  T/ a
" W8 R2 V+ r5 }
实战建模0 a( D$ e& u8 b9 x+ H* p6 y8 s
数据处理
& f& o7 I* r$ @% l# c6 @$ ^7 H: H# H' e" V! H% [

8 f9 e. m* |; ^' w8 [# t首先,我用python爬虫爬取了丁香医生官方数据,一共5534条数据 特征包括感染、死亡、治愈的总数,当日感染、死亡、治愈新增,疑似病例,时间,省份等14个特征- Z3 y. U; n2 P3 O1 y2 p; D
1 N; Z5 J; f0 L  r' f# z. n1 U

9 W2 E: B# s+ g& [% [
5 i& V5 O8 D: @* f

$ D: b) J, G. C) C( o然后用python进行数据提取,提取了较为典型的湖北省的数据作为我的参考依据
$ J3 ~& \/ E  t6 k9 F6 O2 Q5 N- F; E3 D, b: W

" S: N; r; T+ \1 O8 \+ s1 Z. f: M* B+ p' }9 E

/ X6 w/ L5 ^3 G  O  H) N1 a3 i: V然后用python对数据进行清洗,提取出了患病总数,现存患者总数,死亡总数,治愈总数,时间,省份这几个特征
, n/ V2 d- N1 _# `& m9 o6 B8 |- E: K
5 [5 Z- t& A  U4 N! B  o! N. P' L6 x
对日期格式进行修改,值保留月和日,并与死亡人数的位置交换! ^2 C+ M- [7 V* z/ @7 i. F% K: u! q# ^$ h
2 J; M. v( [# O: C# n

: ]# N" G6 X1 r2 ^+ l这里我用python对提取的四个特征分别进行了数据分析(主要包括计算最值,平均值等,),并把1.20日作为第一天,7.02日作为最后一天也就是第165天,做了可视化可视化处理。
7 W2 F3 Y  v- H! |( ?+ k感染人数示意图
8 e+ Z% t: X0 B4 m# @2 Z6 z: L$ T; ?" C$ |; B! k

8 k9 K4 P0 h8 c# h6 J) S6 q治愈人数示意图, j7 l" a% Y6 E( B1 S4 Y" {/ G

. ^- U7 H9 m5 s& o
. @, f; S& v$ {: |% t( F
, t6 l! r9 k( h& |7 }! @9 [, Q
" V. d4 u) `2 K  D/ k6 g
现存患者数量图' ~$ {% J: _( E

7 |( K- Y" G/ B# C% k

8 U4 a1 j. E; H; X; y5 a. n死亡人数示意图" d3 m) n) {" ^9 n0 c' C; [) t% V) }+ J

* M5 c7 r0 F. u2 y2 q* y
2 M% t; M6 t# R3 z- r. C+ A- _

& R" T" B- q- r! F4 `# F
6 e5 }: U" j9 R
经过上面的图片与describe数据分析,我们发现有一天是异常的,患者多出了平时的十倍左右,经过查阅资料,这天因加强了检测标准,所以增多了很多。为了避免这个数据的影响我们选择将这一天删去(或者用平均数或中位数代替也可)
4 p! z1 c8 G/ g  S. M9 o将上面清理过的数据存放到csv文件中
+ ?5 q3 d+ f3 s* K$ v$ P7 `- Q: z- L( k1 r7 \  O& M
# c$ Y* `8 Q! I+ c( ]
模型建立
( N) E0 c, o$ Q/ I模型假设
( q$ U4 T  e0 }: G1 P% j经过上面数据的分析,我们大体可以进行如下假设:5 ~8 [7 z% G; C' w. D+ @  a/ G
1.由于不存在封闭情况,考虑开放体系。
* M9 _5 e( B/ a6 A2.目前数据以天为单位发布,因此不考虑连续变化情况,只考虑离散的方程。
) r5 p  i( _! w2 |3.新型冠状病毒的治愈人数和死亡人数相对较 小,因此只考虑 Susceptible(易感)和 Infected(感染) 两类人群。设易感人群总数为N
2 r- I% K  q; D! a& R5 D4.经专家鉴定新冠病毒患者治愈后至少六个月之内不会再被感染,所以设治愈后移出易感人群。0 z" G4 H: ]: ^% v: w9 m) i
5.设每个病人每天有效接触人数为 λ \lambdaλ(日接触率),且使接触的健康人致病.
- p- _0 k$ |+ l0 }; \6 |" J6 q6.设病人每天治愈的比例为 μ \muμ(日治愈率)% g3 T5 v# N/ t6 h% D  @
7.时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t).
: h) R5 M9 Z9 L( h, Z; [- a! B
) a3 {+ ?# N3 _) d" o

3 H' i+ c. v$ e+ v模型一
5 z3 z7 F' e3 m+ H/ h; L5 Y: z; @

7 k7 x2 N  X* j. N! {  h( Y分析可以得到移出者r(t)=治愈人数+死亡人数) f$ e  q- F" H
通过python数据处理,我们算出了r(t)的值,并将其可视化  G5 P! L" p! }+ T9 V

8 e1 n% I: ~  r  U5 l3 ]8 j) I

( E( V1 `( `. ~$ D+ \0 g
4 l: Z& Y# ~* j& l6 D
9 |' U/ M& H7 k! h7 L$ O
我用MATLAB对其进行了拟合,拟合图像为+ e1 G& b! Q& S* }+ n# r% X. f

" ]3 ]: _5 o' C# Z

/ w. |* M8 ?! v  _! `) ^' S  J! }! X; f: i+ P, l( |8 d4 s

/ M, G1 U( V% F/ f# a% r0 P7 T; H% b, {6 w& G

/ g2 q9 J3 l4 L: @/ W分析可以得到患者 i(t)=患病总数-移出者
! d1 h3 N/ X  M& k可以通过csv文件的currentConfirmedCount 直接获得i(t)数据,当然也可以通过 i(t)=confirmedCountv - r(t)获得,对此我也做了可视化展示2 ^  B* t: t& f
0 @% S; C; @- S& E: i
0 w' K5 l' z# g5 a. ~) m( k$ F
通过MATLAB程序对其进行拟合,可以得到r(t)的函数图像大致为; o( h& |+ w4 `% |

2 P8 m' d# Q( l1 D" ?. ]
) J, m# I2 C& W. Q
0 n" l1 N9 p! Q( V( t
6 a6 s, y7 A( A: n4 E) ^
6 h6 `7 B0 Q2 y1 W

" @& Y7 u0 P  u为了方便,利于公式推导,我们先设时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t). 所以有0 ?8 F+ C' R1 Y! r7 ]+ e" D# _: q  ]; e
* L" z+ a- s1 s0 c% |
, H4 A( _3 }" i: q& o9 z3 J# u4 Y
可以推导出每日新增病例的表达式
! M8 A, _, E8 K5 c# ]$ K0 z* h# t* [- V6 y& X
& l5 E) W1 u) R; U  ~/ |3 E+ |

; Z! e+ f5 P! J0 ^; m8 q
7 B7 \# \6 \! P) a

( Z. f) |% Y9 g
' c" }, \% x* N4 g8 u
由以上两个公式可以推导出以下两个微分方程
  b# R; x& O# N# S& i+ E- R4 J& R, x: V5 ~
3 d2 j" J! B" S- X+ W

, c1 k: m: d6 a, h! N

' n0 \3 O1 d2 Y: X可以知道初值, J* j# U' x8 `3 l
i ( 0 ) = i 0 . s ( 0 ) = s 0 i(0)=i_0.s(0)=s_0i(0)=i
2 Q2 n9 R" h. e2 [* R( r0
$ V' [. o# m7 @; M: r- G# Z​       
2 |3 {- e1 g6 B& j, m .s(0)=s 3 u+ X0 b( t8 ]9 s3 ]' ^' p" i8 m- s6 D
08 k+ e, v( ?- U" J% J# N1 q
​       
) {5 a- i4 E$ f# y2 u& z # @$ {  s, ~7 R$ o
因为一开始治愈的和死亡的肯定很少,所以r0可以看为0,于是就有:# O: O4 a: j9 u, k" @% i$ c: Z
i 0 + s 0 = 1 i_0+s_0=1i 0 }) M) w1 Q/ \. W. t
0/ p& u0 d4 _- r
​        % F' \: }. y, h: \  }
+s
* H; g+ Q4 \0 T  ^& o/ E$ v0
  J) c) K) U. }5 [​        * t3 H  a$ d- J) A- s
=1+ R9 Y( X* b1 t8 c. Y9 n
通过解以上微分方程我们可以根据经验假设λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)的值分别为1和0.5(也就是每个患者可能使1个正常人患病,患者可能有0.5的概率被治愈);由于一开始患者肯定比正常人少很多,所以我们设i0=0.01,s0=0.99。对其求解可以得到s(t), i(t), r(t),的变化图像
8 W- `' J  q1 a1 M' g6 e; @1 O; x3 b3 ]: b8 O
1 @' W, W- W0 G* i6 S
, Z6 f3 @( P: W. c  j4 I" L  E
, v* `0 \" x6 q' u3 V
MATLAB程序如下
/ E( ]2 a3 |% e/ }0 zts=0:40;
4 V2 @1 v  k% rx0=[0.01, 0.99];
0 D" `  Z7 N% ^! B1 @! i[t,x]=ode45(‘ill’,ts,x0);8 q4 h) R7 P' e; ?' `
r=1-x(:,1)-x(:,2);
/ p! h% g- \& M- N: F) Lplot(t,x(:,1),t,x(:,2),ts,r,ts,x(:,1)/x(:,2))
- X. ^5 S% s+ X" H$ Q& \legend(‘i(t)’,‘s(t)’,‘r(t)’)
3 d8 }" e6 t' S% j
: K$ G7 X7 a$ |: L8 y

# A" ]* r) f( A' m. A5 D& ?: Lfunction y=ill( t,x)# d9 l7 R2 ~4 o; s
a=1;/ h; K; o5 h2 e, m" [1 z
b=0.5;7 W. x0 H& E) F1 M
y=[ax(1)x(2)-bx(1);-ax(1)*x(2)];
- C- G/ {* b4 x; D. s( x
9 Z6 J4 ^; Z: }7 z- W2 M- y% s
  _$ L6 x, Z8 `$ e/ W, m
结果分析:患病人数肯定有个高潮,但之后高潮就会减弱,并逐步降低为0。随着医疗卫生条件的不断提升,患者的 λ \lambdaλ(日接触率)肯定降低,μ \muμ (日治愈率)肯定上升,所以我们可以把λ \lambdaλ调一点为0.8,μ \muμ调高一点为0.6,可以得到以下趋势图。所以应对传染病很关键的一点是我们要提高医疗卫生条件
. b4 K# N5 R/ z+ k1 i: p+ F8 y& \
! G9 B. @) P4 r; \5 S7 K
8 ~% i1 @# J: n, Q
模型二3 ?) m0 D2 T; b0 K8 W

3 F, i6 L4 v6 Y( v
. X  z: X9 {$ ~1 X
实际上,λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)都是随着时间变化的,这里我们设s(t), i(t), r(t) 为第t天健康人、病人、移除者(病愈与死亡之和)的数量, s(t)+ i(t)+r(t)=N..* D  n7 |: h" B1 G+ A7 B, x, a
(t), (t) ~第t天感染率, 移除率(治愈率与死亡率之和). a+ n( Q8 ?- D
有 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)1 k" ]! x; [% x) ]9 D
因为s远大于i, r,s(t)视为常数,所以有6 I; h  G+ q( a: J$ P* n- w3 E- R

9 Y" a! e1 K# m) i0 s' z8 r  g4 F
( L& a% w; A' ^! c2 J: ]# u

9 c8 @5 N6 Z" k1 [2 W
( b2 c2 ]. q6 T; J( F/ a
取差分近似导数" D8 c4 ]+ [# K- q. q( D+ o
. C# N, K/ P# A9 R2 c+ R7 C4 H
8 X8 `8 @: \3 y: ^1 r7 j
+ y3 P0 x7 b/ Q, l- ~
3 t+ `$ p, W4 b7 V. c! |  m$ S
我们可以先用真实数据对(t)进行展示并进行拟合  L7 d" @: S4 _4 q  |  n2 _

, d- ?* k* A8 ~2 @+ j

5 G3 d* o  z( s
7 k# ]% J: r# p8 B* n* J. O
' n3 B6 N8 _( t6 O+ E, D
当然同样的方法对(t)进行拟合  q  @+ v# d3 @0 B3 i2 I

, ~0 k: Z( t- c4 H9 _
* f, f8 U- m0 |, `6 |- K. l, _
做不出来了,好难,光这些东西就弄了四天,到了数学建模国赛得多难多累啊,哎,让我这个小白手足无措。毕竟还没有正规的培训,这个模型等期末考完试一定好好做做!!!
: s& O; [3 _2 @# ^$ |$ R# h冲国奖; @- J5 \) o' ]
冲国奖) D8 D: ^: m4 T( Z6 D
冲国奖1 l% O1 F5 @% c2 T
————————————————) y* W1 Z6 G( S' S
版权声明:本文为CSDN博主「小白不白嘿嘿嘿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
6 h6 w. f- R% M+ G* u. W3 b! V. q+ q2 }原文链接:https://blog.csdn.net/weixin_45755332/article/details/107094630  Z# h% F# O/ G; [& d* [! E+ w
2 i, h, `7 P! _9 J& O- f: q

* z- ?7 {! E8 L7 _' p




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5