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