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