数学建模社区-数学中国

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

作者: 杨利霞    时间: 2021-6-22 15:35
标题: 数学建模之传染病SIR模型(新冠真实数据)
' E# G1 {( S& s$ \
数学建模之传染病SIR模型(新冠真实数据), q6 r4 J; [- F  D
传染病模型的基本问题8 X1 n* m& l- b3 ]  k4 ~
描述传染病的传播过程
0 v" j1 v  U. k& ^1 f# G2 S1 ^分析受感染人数的变化规律8 D/ ]) e+ j2 P: N0 e7 o
预报传染病高潮到来的时刻
8 \7 x/ Y$ g. O$ E6 N预防传染病蔓延的手段
+ D% L' L; Z- A* w9 K: p按照传播过程的一般规律用机理分析方法建立模型4 o# J  Q+ M  M  n* F4 M
注:我们这里是介绍数学医学领域中基本的传染病模型。不从医学角度分析各种传染病的特殊机理,按照传播过程的规律建立微分方程模型.
0 U$ ^( ~; F5 [1 H3 A: v, Z: a2 f) a  _  b+ s
0 h" Q7 O) i8 H' a& e8 T) u2 h0 L' s' H
建立模型
" S* G; p$ }  V+ L0 f4 I模型一
! D$ E! @4 {5 f4 P( K" A假设:" u+ I- d" ~4 |

/ z! s4 g8 n# V/ z

0 H4 d6 d! u2 K  n5 [& v设已知感染人数为i ( t ) i(t)i(t)(病人数量随时间变化)' n3 M0 X  M0 F) j4 R
设每个病人(单位时间)每天有效接触(足以使人治病)人数为λ \lambdaλ
. v$ o- Z: T: t( @0 R模型:) ]3 v. }+ c8 Y7 k: @& e
单位时间Δ t \Delta{t}Δt内,新 增 的 人 数 ( 现 有 − 原 有 ) = 原 有 的 × λ 新增的人数(现有-原有)=原有的 \times \lambda新增的人数(现有−原有)=原有的×λ,即( }' [* b( q' O) O

1 _* _5 F, @$ A3 Z

* ^, h, U2 W0 h+ }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
. R! t6 A& M  l8 V一开始的感染人数为i 0 i_0i ! I6 V! M2 s& _
01 B( a* t) D4 z: S
​        / n- |- l+ k, f: e  \

5 [& M% a5 y8 d; c5 Q0 _i ( 0 ) = i 0 i(0)=i_0i(0)=i
7 p' J) V. B; r4 Z5 Z3 J- l: x. R0/ R9 o! o7 f/ a7 T0 r/ p9 S; [( w
​       
3 {# r' ~+ t" _, U ) T- J  D8 f4 T" _# E0 g
解微分方程可以得到7 S: h* i- e: F& _
i ( t ) = i 0 e λ t i(t)=i_0e^{\lambda t}i(t)=i 8 f+ E5 w( H4 B8 b7 m( i
0
& W" c5 p8 S5 L: ^​       
4 [1 y- m  b' w# L5 _ e
7 I( u; x1 k9 [: m! {λt
3 N9 Q  f/ @- C: H' _7 M6 e+ c
+ i4 n/ J7 \* X" }/ R所以可以可到当λ → ∞ \lambda \rightarrow \infinλ→∞时i ( t ) → ∞ i(t) \rightarrow \infini(t)→∞  n2 K+ }5 z* v4 p, @6 ?
当然这是不可能的,因为我们考虑的因素太少了,首先一个是,若有效接触的是病人,则不能使病人数增加,所以必须区分已感染者(病人)和未感染者(健康人)看模型二来解决这个问题' W; u9 C* d& _; F5 B* [

9 O# \6 r( a* m% p
: O  W: e  }( W6 g
模型二; D( y& s0 M1 p$ U' E2 @8 M
假设:0 t6 d. K& C# }2 p4 o

: K5 ?" c- l* f
1 ~4 l* a. M, g6 w
将人群分为两类:易感染者(Susceptible,健康人)和已感染者(Infective, 病人).- ?. P' v3 {( \2 E
总人数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- Z, s! Q( p0 x, M
每个病人每天有效接触人数为λ \lambdaλ(日接触率),且使接触的健康人致病.+ S% e2 P6 B7 t$ ?* a
建模:
$ L3 K& D6 S1 _) [每天新增的总人数为原有的人数乘以每个人可以传染的健康的人数,再乘Δ t \Delta tΔt
: h4 ?% d0 M) _, z1 a& l
! @8 C0 b0 R& G% u8 u
8 Z7 D. p, ]8 d4 p5 q0 x( ~
Δ t \Delta tΔt除过去,两遍N约分得到下面,
! W7 e' }, G) G! ~( V! y6 g0 _1 q# E0 p
, w+ P8 Q2 F4 m9 {6 \1 d* j
* R2 E: j9 J; L
MATLAB解一下这个微分方程6 J* V  L/ @6 ~: t' B: p: b  V- H

8 _2 A( q0 {4 i7 }
7 N& \7 V$ @! T" J
y=dsolve('Dy=n*y*(1-y)','t');
0 N# s9 |( y( E, {0 L9 C3 E6 p/ |# W5 d
* X8 v! @" a5 T% K, z2 \$ B
y =9 ^- P: \1 x# h7 t
-1/(exp(C1 - n*t) - 1)
3 V' L$ X% [- L  N, U                      0+ U; x5 r) R) r; _" {# F
                      1$ M. b& E* `! t) n' y
1
7 s- b& e2 G  g) o: `8 D. ^3 V  ]2
% c. j1 w0 ]( @2 v' ]" Q35 {2 j4 h* v! g/ l8 M6 U# v
4
" z  V, b( V- x* l( s6 K3 q5( o4 B+ |& d6 `8 C
6
& e7 Y* f' b& T写规范点就是这个函数' J2 R/ g) ?! ]# W2 p
. c; E  i* m% D% ], S3 g) f& w5 ]

  [4 T; l7 F& V+ @函数图像大致为* \/ Y. X; K& r8 p
, ~' k4 F* w' J! K: d; |# q
& h7 {% z$ R3 R
可以看出t = t m t=t_mt=t % |& g* U5 F1 u: A# @
m
( {2 r+ v, Z9 M8 j" h) k  l​       
/ j& c  W: {! k7 L* m$ S# g! ?* A 时这里图像的斜率有个最大值,其也就是传染的最快的时候,即传染病的高潮时刻,当然t m t_mt
; P# z. M4 G. t& D9 Y7 @5 Dm. ~0 Y( L5 z+ F5 y2 k$ c: D) F
​       
+ c3 P8 O1 Q4 D6 m' I 是可以求出来的
: @0 W' V7 o# n0 D3 ]6 O5 t* E/ T6 [) {& v; V

' y, n# q7 p' o  y! k% l# R5 L! C再看原式,当t → ∞ t\rightarrow \infint→∞时i → 1 i\rightarrow 1i→1( L! o1 w1 c, f4 |% R7 V3 L
病人的比例为1,当然这也是不可能的,因为我们还没有考虑有没有可能治愈,看模型三
7 J, w, x) o! H0 K8 o5 G. M. R7 m' m% c
8 G1 |& E0 y4 o- T4 D2 v
模型三
1 H( c  p/ y$ T" J6 U( K9 F9 D假设:6 W/ d0 k5 i7 z& F! q9 S/ D5 B. x: x
9 c) l/ g) W$ ^# ?) J$ B) q

" _8 P7 e0 E( b8 d" f传染病无免疫性如伤风、痢疾等——病人治愈成为健康人,健康人可再次被感染。; M* s6 x) d1 D+ v$ S8 r  L1 f
病人每天治愈的比例为μ \muμ (日治愈率),1 μ \frac{1}{\mu} 4 D: D( q+ L8 i7 \
μ# _: p  l: V) _6 C+ S/ A
1* M9 j5 q6 T$ z' a  C
​        1 s$ g3 h  t" y" A# K% B
为感染期,
& d9 f" v+ ?& N: j模型
& s1 f, j+ W* m, O这是减去了治愈人数之后的新增人数
) W/ R2 {8 Q# c8 L2 U# ?; _
% R3 m$ Z1 H2 _9 }' f; v/ N! g+ [

8 V9 K" I0 @' y5 s: n' b9 _+ m+ U" h' `$ L1 {  @% X/ D

8 l0 w7 C# I; B0 M! Eσ \sigmaσ 为一个感染期内每个病人的有效接触人数,称为接触数1 V5 \2 O# W2 Q+ ?

0 g' t& }" a% I+ L
" I4 h$ H8 V$ z4 P
可以画出上面的图形分析下
! }) Y3 x1 f  ]- |# l  T. x+ ]. f
( C: r: g8 C9 `6 \: `) n  }% f9 R1 k
/ h! [  w6 R6 g4 `' K2 }* w0 j
对上面的公式进行分析,可以得到,当i = 1 − 1 σ i=1-\frac{1}{\sigma}i=1− 7 I& R) @' `/ `7 ]4 I, c
σ
% ?# N2 Y% d( B1 ]% {2 V" u8 i15 H3 _5 Z  {! V6 O+ j
​        , T+ p8 B& A% h' U. G. J$ A1 ]2 V
时,i ii对t的导数为0这也就到了i ii的最大值;当0 < i < 1 − 1 σ 0<i<1-\frac{1}{\sigma}0<i<1−
0 A% w/ i. \0 q, Z" Kσ
2 |& z9 y5 e' i2 |# d8 p1" Q6 T( G; T0 I# d
​       
1 B- t5 \. O! \$ i6 }# Z" S5 Z; E+ r 时,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− ) r; y0 q) f8 y5 w( \
σ8 }8 G0 g) p+ d0 Y7 T1 ]1 F
1
% |$ T* ?! r0 V. e​       
6 C9 z! O7 g+ s, [9 w& z. Q) o) z9 M/ ` ,d i / d t < 0 di/dt<0di/dt<0,i是单调递减的。' v1 F) m, o/ P5 H- S

8 B4 |' U$ p" B2 a
$ v0 ^, u# X! y: D" s* P
当然我们也可以画出i ii随t的函数图像
. y/ s* |9 ]% v  M9 C  S" C2 _, g
& l, D8 H' R2 q7 E
先看红线,若初始条件i 0 > 1 − 1 σ i_0>1-\frac{1}{\sigma}i
/ J6 T# s; v9 [9 V! L0* o6 g; j% S9 e; y5 I
​       
; i) b, H1 r# r( j >1−
$ |0 J1 l9 ?& C2 M3 n8 qσ7 c0 e" G- n  F  N
1
7 P9 W3 O7 C, ]5 L: n# |8 G1 }​        9 y* ]4 w6 R7 a3 v$ G* M" v
d i / d t < 0 di/dt<0di/dt<0,i就是单调递减的,. h' K% `; D3 b
若若初始条件i 0 < 1 − 1 σ i_0<1-\frac{1}{\sigma}i
! ~5 I; f8 l% N* j8 y6 j0# x7 D( K& S" z$ E6 ~
​        % r# i# R, l/ d
<1− - h7 L% a' x8 M' Z. w3 D6 {% R2 X& X1 o
σ
6 G% B( [# Z& V( z7 ^9 X5 b0 [  X, D1" x, [: L0 I, i" B+ B
​       
+ V: |% T; D, A: N( O: b0 z ,i就是递增的,可以看到i对t的导数图像有一个最大值,下面的黑线就有一个增加速率最快的一个值,按S形曲线增长% s' t2 i# U0 i& w% q1 z
( f5 G1 x% M: q1 U4 P  w) b

' Q% V: p! x. ~' _! \& \3 Y- ~σ = < 1 \sigma =<1σ=<1时d i / d t < 0 di/dt<0di/dt<0 i肯定是单调下降的,最终降到0
! G% N2 g6 v. ]9 H
8 R9 R1 o* |! l  E. l
+ W% H+ m) x) y3 G0 R
; H- m% ~" C+ U4 P/ X

+ x  J% Q/ U8 U0 {# |综上:3 a8 t! F: I3 b/ s- v9 N
想让患病者越来越少,σ \sigmaσ必须小于等于1,即感染期内有效接触使健康者感染的人数不超过原有的病人数.2 O, q4 y2 y& p7 }- f" h

: P, S8 ^, t$ X& h$ Z

4 s% T/ q7 ^) Q0 L! s这里我们分析的是感染之后还能感染的情况,但有些病毒感染之后会在体内生成抗体,就不会再被感染了,下面我们分析这种情况。' @$ r, p) Q/ B& [9 t3 ]7 @9 V: R
! R2 z) p1 y( |' ~. l5 ^
1 g) U( q2 O  O: ~
模型四 SIR模型
7 x' g0 f" W; q" n$ N6 |9 KSIR模型是常见的一种描述传染病传播的数学模型,其基本假设是将人群分为以下三类:0 d2 g/ q8 c/ G$ g" Y6 D+ i# H
) D$ c/ [5 S+ F) O+ o

' j6 b4 Z5 Q) }1 ?& T  k1 易感人群(Susceptible):指未得病者,但缺乏免疫能力,与感病者接触后容易受到感染。6 I/ c+ d& M8 {9 ]5 [* W7 j
1 @; g& R+ R" J* w  w
3 o5 r3 E# {0 x4 U1 H
2 感染人群(Infective):指染上传染病的人,他可以传播给易感人群。# m9 Z9 X* X  Q* R) }5 l

4 D/ c4 `) o+ l" h! v; y
6 P, z  \& b6 S; S8 F! m8 V2 o/ Z
3 移除人群(Removed):被移出系统的人。因病愈(具有免疫力)或死亡的人。这部分人不再参与感染和被感染过程。3 H- _" w; r( ]! a: ]
+ [" t8 R2 }6 _1 |, M

+ v, [  ?* n- X$ c- Y! g假设:
+ F/ s$ v2 x/ C! j9 Q! {1 E# z5 \6 Y; K; Q" {
! q9 |$ ^) W" V& i- t& P9 f
传染病有免疫性如天花、麻疹等——病人治愈后移出感染系统,称移出者(Removed).
. b0 l  B% I, _) }; u5 |" E总人数N不变,健康人、病人和移出者的比例分别为s ( t ) , i ( t ) , r ( t ) s(t), i(t), r(t)s(t),i(t),r(t).
7 J0 f! h- O- r' C& U病人的日接触率为λ \lambdaλ , 日治愈率为μ \muμ, 接触数 σ = λ μ \sigma=\frac{\lambda}{\mu}σ= ( K$ K$ N# @( r8 M3 y
μ
0 g$ [# K- m- p: |7 b  I$ Tλ
% J+ {$ |  b- Q- M2 `; d' m​        0 `, r3 {4 i: u2 Q% D& P6 i- E; c" F
5 r( z: Z& _( v- Z! q# v
建模:5 P- j" ?& {* D9 y6 i
s ( t ) + i ( t ) + r ( t ) = 1 s(t)+ i(t)+ r(t)=1s(t)+i(t)+r(t)=1
5 C( `+ q1 j+ O) E这个就是病人减去治愈的人,和上一个模型是一样的! p; f$ Y8 ~; D  R6 v

5 k+ X+ N0 G6 |$ X6 V3 J

+ }6 q' h. G: J% F% }! F: C因为有治愈后是有免疫性的,所以可能被感染的总人数要减少,减去移除者就是0 n: [! m. a. W4 U* p' x) d

5 R6 k$ L7 n" M$ r; ?- w6 k- E6 L; ?& @

+ i' j0 K/ ]2 |' B1 \将上式化简为:
6 y. o# w* D' d9 P# n
, m4 n# r0 i6 ?8 l

% }/ N: V' z8 n; Vi 0 + s 0 ≈ 1 i_0+s_0\approx 1i # `+ A/ j" ^% M) V7 p
0& |" P" y7 C, c5 v/ O$ ?
​       
! |: L" S7 a# o" z* b% [ +s 0 J, Z6 y# g0 [# O' O
0
# g" N' k8 t+ G​        6 U+ w1 M! W: x. x3 N
≈1(通常r ( 0 ) = r 0 r(0)=r_0r(0)=r 4 c0 z' g% e! J/ P; S. D* Z
0) F! a* i0 M" G# C5 k- X# |
​       
% c& u4 |+ y0 d% b" ]- l  T 很小)9 [. P4 t( V! d- r" ?0 u
) M  J# C  I1 Z1 W- y: e
$ M9 h* C, }8 e% B9 A
关于i(t) , s(t) 的非线性微分方程组,没有解析解,只能通过数值计算得到s(t), i(t), r(t)的曲线,下面来看下曲线的数值解的MATLAB程序
0 W- N8 A% F5 `1 L; ]3 Z3 K8 P  I' n

" }/ x* m$ d+ ^6 _$ c9 K这里我们先设λ = 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 3 L- ?3 G8 D. Q2 s
0% v# _3 {( X5 d9 V6 j; @: L
​        6 Q& H6 q; B4 _0 H& e
=0.01,s
4 o! H- @# v- U" f0 T06 f( M$ q0 `" F, C+ M) S5 S$ c# ~+ F
​        3 Z3 p$ W- y, y0 K
=0.99
& y! a0 k0 Y* u" u% L' M3 [6 R也就是平均一个病人人传染一个正常人,治愈率为0.5;开始的病人比例为0.01,正常人为0.99,设没有天生带有病毒抗体的人,所以r 0 = 0 r_0=0r
/ B! }6 z" g' _0
: x* Q, D3 x. u# ~, l​        6 c) S$ v$ ]( z9 Q1 {. u2 F- c
=0,之后若果病人被治愈,则具有抗体了,有抗体的人为:r = 1 − i − s r=1-i-sr=1−i−s2 R' k& [+ K4 A
5 B  q# ?. @/ J: j9 M8 Q# W

( b' R; ?& x) uts=0:40;4 a+ k. }  s. \6 J+ p3 m8 R
x0=[0.01, 0.99];
( M) h# v% E+ g. c7 Z8 N0 l4 K4 ]+ J* Z[t,x]=ode45('ill',ts,x0);. d' T# p1 m% H  C& O6 y! v, b
r=1-x(:,1)-x(:,2);; ?7 K" W4 c+ N) t" a% k' B+ z& B
plot(t,x(:,1),t,x(:,2),ts,r),grid+ r: {/ a, I* \) C$ Q" z/ d
legend('i(t)','s(t)','r(t)')8 {6 u- q, A$ w! \4 O; u; G

- z5 t, d! b$ P! O- Z& K$ ~. E
+ G8 k/ i. f7 Y9 f. {( x% @
function y=ill( t,x)7 ?9 S( y/ g# j& a
a=1;
3 P$ f7 v1 p8 Y# mb=0.5;
7 k0 T  T' f' c: r3 {& ?' N9 ~) @y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
  [( n9 y! Q! G7 a9 G/ G1
: j6 Y( ~) |3 f/ i8 Q1 q9 Y4 Q" c2
' i$ b3 I; c+ o7 ~( o' g, Z' }4 r, s3. U4 _' N  A7 d
4
, N9 `( C2 @' D' N4 T& G6 y5
# ^+ N! \, s4 [$ j$ A3 ^$ B6
  f7 {" S* ^- r9 j9 N. [7
' u5 V5 x1 k$ P. w5 _8
. Q5 U% c6 V6 @& r4 ]9 d9
3 E8 G, ?# [9 \, b; C" U10& o9 G4 Q( v8 n$ k2 w* G
11
2 Q, D8 f( B# C" `# ^9 w5 f, g3 f: k- b" q6 j/ M0 C" B

8 v& _/ _" l. S. n* D7 T可以看出:s(t)单调减,r(t)单调增,都趋于稳定, i(t)先增后减趋于0.
: o; r5 G* ]+ o2 S3 O+ J结果分析6 ^  b( _( {8 }! V7 v: R8 W
先回顾一下参数
6 Y1 q' a) R8 A# f# Z: A, _, I接 触 率 λ ; 治 愈 率 μ ; 1 / μ   平 均 传 染 期 ( 病 人 治 愈 所 需 平 均 时 间 ) ; σ = λ / μ   接 触 数 ( 感 染 期 内 每 个 病 人 有 效 接 触 人 数 ) 接触率 \lambda;治愈率 \mu ; 1/ \mu~平均传染期 (病人治愈所需平均时间);\sigma =\lambda/\mu~接触数 (感染期内每个病人有效接触人数)接触率λ;治愈率μ;1/μ 平均传染期(病人治愈所需平均时间);σ=λ/μ 接触数(感染期内每个病人有效接触人数)
- s* o' i  \; Z& l" Q! t# G$ p可以分析出:/ ?' k* J; n& F. r

/ J% G% G& }  v3 B9 B/ i2 z$ ~; \

  b4 |9 c5 R4 K5 k' O; l随着卫生健康思想水平高,接触率λ \lambdaλ变小6 o  M* O: q5 n& i$ s5 b
随着医疗水平的提高,治愈率μ \muμ增大7 u, g. y- |: x/ `: |
接触数σ = λ / μ \sigma =\lambda/\muσ=λ/μ减小——有助于控制传播.+ |4 j  j2 H+ W
我们可以试试稍微减少一下λ \lambdaλ,增大μ \muμ,来看下效果: H3 z' u0 o+ X2 M

2 K( h8 ^8 E- ^- Y3 F2 ?" J3 J, l

' z3 l$ n" w; D) k4 p+ I0 Xts=0:40;: D+ @+ e* b$ s/ `
x0=[0.01, 0.99];
+ |, }/ R* u: ^/ W( l[t,x]=ode45('ill',ts,x0);
& o+ D: T$ y7 sr=1-x(:,1)-x(:,2);
# B/ X6 `# F& E* A: oplot(t,x(:,1),t,x(:,2),ts,r),grid; C: ]# z$ I  e$ {0 E
legend('i(t)','s(t)','r(t)')
( z0 t5 M9 t0 m9 S, a+ c" @# @7 l/ U* v9 G/ N
% @1 T2 l( ]4 M; @$ R+ B8 p
function y=ill( t,x)( m2 f5 J4 U# M2 E5 Q% r! R9 t
a=0.8;' m1 n2 X8 V" x4 w
b=0.6;+ S0 Y( o+ K5 h
y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
# I. h; W3 V/ u* W9 _  t4 q1
9 E" z0 t% P% ~0 t+ s, u1 w+ i27 D9 e) y+ q; f& D+ N/ g
3+ S5 B8 G( o) I- N4 Q3 I) K* g
4
. \- q  J! I8 w6 a3 l+ H5
2 k7 ]2 K6 @3 B, K2 y+ E3 I1 E6
1 x- O* t! f$ F) N# ^) n7
' Z1 S, b  \8 V0 T3 x, p8
: }  E' R5 s0 u4 R- J9, r) ]& G5 R8 A, `2 C9 s% ?) G
10
2 I  {* A3 W# |% Q: U11, l3 l& [0 Y2 a* k; t1 N
; b0 k! |" i8 P  |/ C
) N, Y: r+ @' }  P5 \) g
综上我们可以得出结论:想要减少传染病的传播,我们就要在接触数σ \sigmaσ上下功夫。
, T  D1 ^7 H; u4 v+ n) e5 b" J) O8 x$ A" }
1 L1 }* ?* [' [+ ~
实战建模
/ ]' W+ f% ]1 c& }数据处理
% o! B7 V  d7 l! I. s/ q' g0 q3 `5 q6 P; [' V9 v+ k$ O* _7 R) w

% X- R" e6 t8 t: Y+ {首先,我用python爬虫爬取了丁香医生官方数据,一共5534条数据 特征包括感染、死亡、治愈的总数,当日感染、死亡、治愈新增,疑似病例,时间,省份等14个特征3 i9 h% L' Z: p$ v" m

: G" g, ~; R, r  L
# F! ~( C5 d) J7 x# E( o4 {
9 U" V/ ^6 T. m' f/ B# {0 c
. V7 \- c# K( i; T. v* _# c' z
然后用python进行数据提取,提取了较为典型的湖北省的数据作为我的参考依据
: t' o; u$ Y2 T9 a* U+ x; ?% T# a! `' C. c

5 f8 V# Q5 l0 M4 O. x  L  u( ~! x& H+ r3 {7 q: _. d
! s' O/ \9 t' B1 e, R( G8 ]  y( k
然后用python对数据进行清洗,提取出了患病总数,现存患者总数,死亡总数,治愈总数,时间,省份这几个特征
+ f2 c$ D5 D" d/ N. m0 P3 P8 i/ O7 V& h( H, o  B

5 g; n2 B! L, c: K' A+ Y$ O对日期格式进行修改,值保留月和日,并与死亡人数的位置交换  F4 x2 Y1 ?1 E. Z) {

2 F" l2 m) v1 P$ q: f
( @4 A$ r2 w/ @2 {7 W. O  u
这里我用python对提取的四个特征分别进行了数据分析(主要包括计算最值,平均值等,),并把1.20日作为第一天,7.02日作为最后一天也就是第165天,做了可视化可视化处理。$ ~" {( B1 U2 O6 s& X  D$ ?
感染人数示意图0 H" w" x5 e' p; U+ o9 r3 q! W% i
" u* ]: C! \1 j3 u/ N( r5 v( z

- F6 B  b* z1 |! O7 U: I5 F治愈人数示意图
' J: T# Q. b, V" O
$ w: G* M/ {7 s' r, N8 n) }

0 d8 E5 H. v" |2 v0 y2 r4 a/ x# J* y  Y  {0 v; E3 A/ w9 ?9 i
( D3 w- q4 k( N. a* }
现存患者数量图( w  ]* u. ]3 t) \' @! O$ R
2 ]% D0 x  Q* I% X
  k% T9 p, @/ N( |* l$ D/ |8 j
死亡人数示意图
5 `7 C0 Q1 a/ n3 m. z
/ q# I3 z5 s2 u* r  H! Z6 E% v

* V6 O- L+ Z4 {4 z, z' l5 W- n" T1 c; ?1 ]1 v: L
1 r# Q! k0 G  `. R
经过上面的图片与describe数据分析,我们发现有一天是异常的,患者多出了平时的十倍左右,经过查阅资料,这天因加强了检测标准,所以增多了很多。为了避免这个数据的影响我们选择将这一天删去(或者用平均数或中位数代替也可)
/ V  {5 V* i3 j. I' D4 ^& }$ L. F将上面清理过的数据存放到csv文件中
/ o" n* q7 f+ q, G- t" m. n& C/ J8 u! V# j. g. c8 M
! |) A. A6 a# @( X" j
模型建立: s+ t3 X8 M: @; M
模型假设; g  [* k" _' x+ q$ U, ?% e9 A
经过上面数据的分析,我们大体可以进行如下假设:
8 X+ s: b, i+ v' ]$ d7 c; f1.由于不存在封闭情况,考虑开放体系。
% G% n& c/ E/ F" j2.目前数据以天为单位发布,因此不考虑连续变化情况,只考虑离散的方程。, L4 ~2 H: {7 d( U1 _: |& A
3.新型冠状病毒的治愈人数和死亡人数相对较 小,因此只考虑 Susceptible(易感)和 Infected(感染) 两类人群。设易感人群总数为N
& [/ j; v$ S7 q( W  u4.经专家鉴定新冠病毒患者治愈后至少六个月之内不会再被感染,所以设治愈后移出易感人群。
* _# b+ @8 l2 ]( s( r0 q5.设每个病人每天有效接触人数为 λ \lambdaλ(日接触率),且使接触的健康人致病.- _% C7 _" H5 S
6.设病人每天治愈的比例为 μ \muμ(日治愈率)
. C  X! P) s5 J" }: e7.时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t).
* ]' c8 ^# @: Q+ T& H9 v
- Q# q: Q8 G6 Y$ g% R

9 y* X) x6 \) o% |. A: d" {4 s" {模型一9 M  c, ]; _  Y- n% z

* C$ x( T4 Q. i8 D- B- V( ^
8 J- u, V0 W9 g% Y+ X( C7 L  w
分析可以得到移出者r(t)=治愈人数+死亡人数5 D* }- a; l, ]/ M0 Q  t' ?
通过python数据处理,我们算出了r(t)的值,并将其可视化
% [% J! m0 h0 h5 ~- U, A: L9 Y- {4 A% i8 G2 Q6 P

! |" r5 ~1 D; T
) G. R$ T& L+ A
9 k+ H+ J% O4 k6 X
我用MATLAB对其进行了拟合,拟合图像为
- e8 @- d: {; y* ?3 e( `$ c
& d" ?8 f. c. l* f8 e3 f$ w, n# ^

. ?, T: L0 a* q& Z) @" C* T' {
! F0 q3 h0 a* s( t3 v$ b. D

* e2 O) f- t+ D- t; s/ t% z% q+ T
, S. Z: o: O4 T. M
分析可以得到患者 i(t)=患病总数-移出者% S% d5 K" x4 K$ K
可以通过csv文件的currentConfirmedCount 直接获得i(t)数据,当然也可以通过 i(t)=confirmedCountv - r(t)获得,对此我也做了可视化展示0 w- V& S7 p7 `

7 N  u+ Z: f: _
+ P% b+ u( k: k3 _( M+ m
通过MATLAB程序对其进行拟合,可以得到r(t)的函数图像大致为- W( S( R# g/ `4 X" ]$ I( k, U9 k
' R5 m  A3 d3 h! @, M; g

: x) S4 Z9 ~' G1 A2 P; X
" j( k. ?0 `! {2 x+ f! ?
: r" K4 P' m% Q$ z
& B2 I8 \5 A7 R. A4 A7 ]2 w% S

) x1 I1 q- Y4 U$ ^$ a* c为了方便,利于公式推导,我们先设时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t). 所以有
8 V6 }" R( f6 H0 B
4 T4 L, X! S- [* \
4 b8 p; j6 q* n  n, v
可以推导出每日新增病例的表达式5 S$ \# O: a$ V# r: y- L
/ E$ v4 K4 I: ]5 N1 N; L

6 |. D" j& M# U" [: q& |' g& @5 j6 ^5 K9 U% T
/ i* e, H! a9 `7 e$ V

/ v2 A9 l1 }9 F$ w

7 W# Q! P/ W+ c6 _# P由以上两个公式可以推导出以下两个微分方程
( `% |! O" v( k: b- t7 Y, \& x. z* c( D6 P

. g1 w: I/ e% Y. l/ _  s" J' B3 T: P& R6 U1 Y3 n

  Q0 _4 @% `5 F" g可以知道初值: F  a" \! k+ d8 F% T
i ( 0 ) = i 0 . s ( 0 ) = s 0 i(0)=i_0.s(0)=s_0i(0)=i 2 {9 \: ?# @. Z- X, r! O
04 D# V8 m, V, f" i% g/ D, t
​        " a. d3 v  ?: m
.s(0)=s
1 x4 o# d; f9 U: K* j, X05 Y, c) O& e% G* n1 i9 o* ?
​        $ ^2 u8 p; N' J) d9 y$ V

- Z  n7 M# ^2 Z2 T  z/ q9 j" b因为一开始治愈的和死亡的肯定很少,所以r0可以看为0,于是就有:
1 O; Q4 ^& }* {; t3 ?i 0 + s 0 = 1 i_0+s_0=1i 7 l" x+ k. C5 d9 y
0
. l! [0 X5 p& o​       
5 C! |1 `0 y. M: N9 W +s , d& @+ B" I* k! y0 @( }
0
$ E/ n" F( }# X& E​        1 c, Y! P3 a( `. T1 V# {$ L
=18 h# o0 \' v. m
通过解以上微分方程我们可以根据经验假设λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)的值分别为1和0.5(也就是每个患者可能使1个正常人患病,患者可能有0.5的概率被治愈);由于一开始患者肯定比正常人少很多,所以我们设i0=0.01,s0=0.99。对其求解可以得到s(t), i(t), r(t),的变化图像6 q! H! ]7 M5 u! a
2 h8 H4 |: N* G
7 k0 P# z$ ]' S5 E6 \3 j# R
6 i5 [  X9 b  n# C
" }. s5 v' ?6 Y6 j$ `
MATLAB程序如下
) l4 A1 t$ C$ l; y1 Lts=0:40;
  `" q, B' I, |; R7 p% J/ t  Yx0=[0.01, 0.99];' P6 k; {1 P; h6 Y' l2 K  V
[t,x]=ode45(‘ill’,ts,x0);
) v) s, W" \! D1 t6 U: xr=1-x(:,1)-x(:,2);, o! H5 H* n* W
plot(t,x(:,1),t,x(:,2),ts,r,ts,x(:,1)/x(:,2))
4 o. F" w; Y$ q3 Klegend(‘i(t)’,‘s(t)’,‘r(t)’)
9 z/ c5 v; y) u5 B& x* z
- D* i3 n0 B: y/ w

1 ~1 e5 Z: ^$ \- U8 t* kfunction y=ill( t,x); D/ S$ Z6 \4 i% U* R+ |4 M
a=1;
  X( R  B4 i' q& [+ U1 cb=0.5;
$ B& N+ d0 D) A& w6 L0 @* \y=[ax(1)x(2)-bx(1);-ax(1)*x(2)];
# ?; @6 d6 [$ `4 |* e9 [, M9 R8 e# l. ^6 S4 a
0 ~6 s! N7 h0 v) w  _5 G# r2 ^
结果分析:患病人数肯定有个高潮,但之后高潮就会减弱,并逐步降低为0。随着医疗卫生条件的不断提升,患者的 λ \lambdaλ(日接触率)肯定降低,μ \muμ (日治愈率)肯定上升,所以我们可以把λ \lambdaλ调一点为0.8,μ \muμ调高一点为0.6,可以得到以下趋势图。所以应对传染病很关键的一点是我们要提高医疗卫生条件2 d1 i8 V5 P/ K2 u8 N% E

% P0 `# W8 t: G( |( b4 T

; u% u- I2 V3 ^0 U" q  X2 y: _. [0 O. \# e, q
模型二7 Z. m- o1 c9 |9 V% `7 p
& ^) c) v3 S. R6 T$ _2 A$ b4 r
1 U& I% n2 e! L( |
实际上,λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)都是随着时间变化的,这里我们设s(t), i(t), r(t) 为第t天健康人、病人、移除者(病愈与死亡之和)的数量, s(t)+ i(t)+r(t)=N..7 q/ H9 h/ L& Q7 b& V+ `1 r
(t), (t) ~第t天感染率, 移除率(治愈率与死亡率之和). M# c! K( [( a' Y, j
有 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)4 Q- |9 A8 e8 O1 a! G
因为s远大于i, r,s(t)视为常数,所以有
; j" E4 Z. M7 [8 k! a2 L" f9 ]- S# ?# }  r* ~; [; g( [
/ A  A( g6 d0 o$ t! ]1 l; [9 E
1 a9 J0 f( |; ^3 B
, _, Z- s6 l  v6 {) Q, x
取差分近似导数
/ ^. N5 g0 r8 Y! y( m1 b1 N3 x, w# D& c6 t

& y/ Z8 M0 U2 z9 a! Z0 Z( I" o/ X9 ~" b. U" M7 y
) y6 S, C6 I/ c/ z( r4 q
我们可以先用真实数据对(t)进行展示并进行拟合0 h  h. ?0 Q, t. y# N5 q3 N
4 e+ n0 _) Y* Q
$ J- N; L) U3 h/ o: a& y. p1 y
3 l- u" d$ y4 _, k, o% g& ?

9 R4 l- U1 o3 d5 s+ m. S# A" V. F当然同样的方法对(t)进行拟合
( N# J( \6 i7 o8 [/ I1 |. J$ c7 w. m
+ }1 F* D5 L1 v6 ^, Z0 |0 Z
做不出来了,好难,光这些东西就弄了四天,到了数学建模国赛得多难多累啊,哎,让我这个小白手足无措。毕竟还没有正规的培训,这个模型等期末考完试一定好好做做!!!6 I& q( E7 Y+ W' w* \0 y$ {- ^
冲国奖
/ |: Z9 b, x& }冲国奖
' |7 b$ s4 L: ^( e% F3 U' f  W. l冲国奖$ o2 z+ x! h7 c
————————————————
$ p. a. R$ x  ?: X版权声明:本文为CSDN博主「小白不白嘿嘿嘿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( U/ ~2 h% u8 L/ A+ Q2 \
原文链接:https://blog.csdn.net/weixin_45755332/article/details/107094630) V" S7 [5 A! m7 Q& p) o$ G! i
$ j9 z; _) t% C: p6 i
7 K; r% P1 Y! c- e0 f: a





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