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