QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5735|回复: 0
打印 上一主题 下一主题

数学建模之传染病SIR模型(新冠真实数据)

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2021-6-22 15:35 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    3 z" b8 K* S+ Z  x) X# G5 {
    数学建模之传染病SIR模型(新冠真实数据)) M) i$ i1 Q9 u8 c; y" S! r
    传染病模型的基本问题
    ) |* T5 _4 K. \描述传染病的传播过程5 }6 `' L* b( l8 [8 ]/ _
    分析受感染人数的变化规律0 ?. r" N2 o( n, {/ _
    预报传染病高潮到来的时刻
    ; j: l  T' D; n1 P$ @4 H) m预防传染病蔓延的手段
    5 F/ c! }: W. N+ ~2 j: Y+ Y+ p按照传播过程的一般规律用机理分析方法建立模型
    / j4 _! N6 X$ ~( y4 p; \3 |# a4 a注:我们这里是介绍数学医学领域中基本的传染病模型。不从医学角度分析各种传染病的特殊机理,按照传播过程的规律建立微分方程模型.4 u# |# s# X" X. W  y: `2 \
    # `, y" \! b+ w$ I0 E: F3 V' {6 {  m/ K: Z
    * t+ M8 v7 n* K/ @3 ~
    建立模型( y; ]/ x( E0 d* A$ m% |7 M
    模型一: {* e, S# N' Q' I( Y1 I7 t# `2 `
    假设:
    / N! B* _  U* ^4 Y1 i* D+ x+ b' q
    6 T3 [7 l1 a8 P# D9 T* _% X
    设已知感染人数为i ( t ) i(t)i(t)(病人数量随时间变化)
    8 l- k/ t- C2 r设每个病人(单位时间)每天有效接触(足以使人治病)人数为λ \lambdaλ* u) Q8 s/ T$ q1 |7 t$ P6 V# `
    模型:/ U- @, a' J: `' F0 ]! F
    单位时间Δ t \Delta{t}Δt内,新 增 的 人 数 ( 现 有 − 原 有 ) = 原 有 的 × λ 新增的人数(现有-原有)=原有的 \times \lambda新增的人数(现有−原有)=原有的×λ,即
    / B0 `- }, Q( X8 J) ]' o5 I8 w( G+ ^& r7 _; F
    # g- Q; f  }# N5 h/ 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)Δt1 N( a9 g* q2 F
    一开始的感染人数为i 0 i_0i
    ) A+ E8 l6 n# h06 V" u1 g) i6 j, w
    ​       
    8 S2 I1 ]  K1 _" ?. }, @& a( n
    & A$ P4 c  [" o6 q) k% ii ( 0 ) = i 0 i(0)=i_0i(0)=i # Z- g% [% _' U1 }* h) A  S
    0+ O3 d5 P- ]& }- c! W; O2 q2 V8 ?$ k
    ​        % g: J5 Z: C+ @% c$ k% x/ H/ ]- k
    3 E1 m4 {( k% l2 R# b4 G  D
    解微分方程可以得到# k& E5 L# s9 Y, U
    i ( t ) = i 0 e λ t i(t)=i_0e^{\lambda t}i(t)=i
    6 n5 Y! f2 }) h1 G1 Z/ i/ D00 o4 O* ]3 V+ t3 c  U7 {+ Y
    ​        , C9 |; F: b, v* Z* f6 p) B# Z4 I
    e * d3 e( y! k+ J, E6 V( q
    λt
    & c+ u2 V# ]1 j/ G6 r$ Y# O+ K1 G : p% ]& c" J) \! F: X
    所以可以可到当λ → ∞ \lambda \rightarrow \infinλ→∞时i ( t ) → ∞ i(t) \rightarrow \infini(t)→∞5 A- l3 H' x; L" S9 C
    当然这是不可能的,因为我们考虑的因素太少了,首先一个是,若有效接触的是病人,则不能使病人数增加,所以必须区分已感染者(病人)和未感染者(健康人)看模型二来解决这个问题8 d8 h2 |& R0 l
    5 q' J" ?: y9 x8 ^

    . S8 m( E6 S( P8 g4 p0 l% T4 R. N/ K模型二
    $ |7 f; e5 ?) }. r假设:
    . L4 @* e; `, \: {& K  k4 @7 g5 C' a# i2 A

    7 s1 q5 n4 C1 `3 d* r将人群分为两类:易感染者(Susceptible,健康人)和已感染者(Infective, 病人).2 \6 c6 F8 u; {. `8 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+ u1 L% K3 }+ H2 n9 p6 \" H9 T" X
    每个病人每天有效接触人数为λ \lambdaλ(日接触率),且使接触的健康人致病.
    . M% u. q! i) C9 E建模:
    5 M" [$ W! F+ t! B( x% d# n, ?每天新增的总人数为原有的人数乘以每个人可以传染的健康的人数,再乘Δ t \Delta tΔt% [# @% m  {+ Y$ M/ L
    9 z5 e: e& d6 `# {- a3 h
    - X* w9 r5 K! ?- _
    Δ t \Delta tΔt除过去,两遍N约分得到下面,3 B0 u, t: h" x% ^

    " S& B6 X* u# D! |

      M5 A: ], X4 J4 }, n0 dMATLAB解一下这个微分方程- q8 U9 D' A/ \1 T% S
    9 p7 ?1 U& B) B$ @  B6 U
    / \) q7 d- X3 @
    y=dsolve('Dy=n*y*(1-y)','t');
    6 t1 l: ~6 Q$ m+ T/ |
    " m8 M3 j# Y  Z6 B
    ) k# y6 }1 P6 I6 j# L! G0 D6 d
    y =
    % s3 [  q3 `/ {, W  E -1/(exp(C1 - n*t) - 1)
    $ N' k- o: \  }* m- x, X" s" J                      0
    $ O/ |$ I) d7 m0 |4 W) M9 L                      18 B6 v; p, i: j, _5 y
    1' U: Q0 Z. k! k2 L4 k. i
    2
    5 V/ Z4 \- o7 p! S; d+ J& q3
    ' K5 r0 v+ u4 i' u' c: C: h+ r4% m; d, r) M) i! M
    5
    $ ?& {" B/ P! Z1 |" o/ w$ o6, w' f9 z5 E) @) y8 h
    写规范点就是这个函数. I  Y+ w' A( d( }6 R4 Q1 I

    * m: n8 U; J' x/ O+ B  @

    4 b$ i/ E) y0 J" m; M6 b" {函数图像大致为
    * I7 O' D7 c$ O1 F
    8 x1 K. e2 ~( x2 e  f! p

    % U& K0 n- w9 X/ H; J可以看出t = t m t=t_mt=t
    1 _* j( D8 A# G' pm
    % x8 k3 x# Z" ]. C5 O" ?' ]- Q$ F​        , @2 s% H- F. c* a" w$ K8 q1 A
    时这里图像的斜率有个最大值,其也就是传染的最快的时候,即传染病的高潮时刻,当然t m t_mt
    5 f; ~3 e! |8 d/ S, Im
    6 u3 d3 q' Y. ?# G  A​        1 Z3 A8 M0 y* e0 w& W
    是可以求出来的0 a! Y0 N% r, m# X2 O: v6 k

    ' g8 i0 K& ~! X3 X& P% K* n: L
    9 O- y4 @) i, Y5 K  [
    再看原式,当t → ∞ t\rightarrow \infint→∞时i → 1 i\rightarrow 1i→1
    # r# ]! O* `4 y) E) u4 ^: U病人的比例为1,当然这也是不可能的,因为我们还没有考虑有没有可能治愈,看模型三$ x+ j" ]: _0 b3 S3 c

    + l) j- r3 a6 [9 a' V

    7 G6 O. m% P) X+ _3 N, ]2 C' J模型三
    1 `. W" s$ M1 R3 Q假设:
    ' _, M  \: X, Q* b3 G" X- K
    $ Q  t. Z# x5 ?7 y
    / v) @( i, w5 [0 i
    传染病无免疫性如伤风、痢疾等——病人治愈成为健康人,健康人可再次被感染。3 T& p) _/ u& l$ |4 _3 B8 B
    病人每天治愈的比例为μ \muμ (日治愈率),1 μ \frac{1}{\mu}
    # T: ]2 Z; G) N1 E0 Dμ. j) }% `# T6 w' I' N9 E/ ^
    1
    " Z# ?. O4 \/ y* R5 x​       
    ! [/ @2 l8 g2 w" e. E 为感染期,4 _- c4 \, O  ?/ M6 |$ c
    模型8 Q% H% p1 G* w7 z6 C, H
    这是减去了治愈人数之后的新增人数! h: d, G$ r0 a9 ?4 r1 b- k  o
    : q* v' t8 c) U$ B% w* \' O2 {# {

    " A9 j' ~: A+ P/ ]; M% k- v3 b$ R1 F) G' D8 t

    + N# u$ v# U+ N, g2 Q* u( d) Kσ \sigmaσ 为一个感染期内每个病人的有效接触人数,称为接触数
    , N" V9 d+ G; u0 ~0 q, i
    # h9 ]$ r- c# B

    7 l$ W# H7 J+ x6 g, }可以画出上面的图形分析下
    . V3 j4 [; y2 q2 @9 l" m  ^1 X3 I4 ?4 `+ p9 O, x# H1 y8 V
    " a0 \+ j: |5 m/ \% `: f4 w, I# J
    对上面的公式进行分析,可以得到,当i = 1 − 1 σ i=1-\frac{1}{\sigma}i=1− # E! {4 L" X5 j' E
    σ0 I) H, {: f$ q* S: ?
    1
    1 c# d3 s4 H9 H( |! X0 \$ @​        2 e* S3 y. a$ ], _; j0 _
    时,i ii对t的导数为0这也就到了i ii的最大值;当0 < i < 1 − 1 σ 0<i<1-\frac{1}{\sigma}0<i<1−
    ' G( r( d# @9 A% _: mσ' b$ H* w! ~7 ?0 D6 z
    1
    2 |( M8 A% a! k3 w+ q/ h  f​        3 q5 T+ p8 v* }7 G# r5 Q
    时,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−
    ( E# z8 ?6 o. x" Q" _) `σ  ?2 R, ]  h# L/ f. ]& C% ~
    19 g3 i2 z& t* u; I% v
    ​        / D3 w9 k# Q. R9 E# G/ c
    ,d i / d t < 0 di/dt<0di/dt<0,i是单调递减的。; l, X$ L7 L( \7 z% l0 {

    * L3 x& x: _( V7 P( _0 ~3 J

    5 y) O% B6 t" b  b) c3 M5 F8 y) C% A当然我们也可以画出i ii随t的函数图像9 M2 N3 C! L2 Q% g( T9 P
    - |+ g+ R1 ^. z. h. i

    + {/ e% a* [6 i先看红线,若初始条件i 0 > 1 − 1 σ i_0>1-\frac{1}{\sigma}i + {8 S4 b  D: j  X) m5 s+ d
    0) ]  V) M' n8 m0 p9 D
    ​        . Z  B8 D9 J, [
    >1−
    9 r  g" V. |: p% nσ
    6 P  u& k+ U# T' |# m+ w& C7 `18 c9 m# b5 p; V5 t9 n- J
    ​       
    9 n+ ]! ^3 l8 ?8 a& i& W% w d i / d t < 0 di/dt<0di/dt<0,i就是单调递减的,! Q! i) q2 x( d+ M$ i
    若若初始条件i 0 < 1 − 1 σ i_0<1-\frac{1}{\sigma}i
    ' h& K+ g% a- A" J7 ?5 k6 {/ S02 w. N6 Y" ]- U
    ​       
    4 f4 z9 Z3 F- T/ A <1−   f/ V  C+ ?+ g/ a& T! q2 l$ y& r. O
    σ
    ! d" t- P: D. X1) w6 r% ~! e0 X7 K1 O
    ​        . I# m  D" ^+ z; s* R7 G
    ,i就是递增的,可以看到i对t的导数图像有一个最大值,下面的黑线就有一个增加速率最快的一个值,按S形曲线增长. ^& ~- V: d$ ]/ ^" M

    ) q9 S6 [% ^4 c" O+ k5 g% R

    ( V. p4 Y' |, U, Z( iσ = < 1 \sigma =<1σ=<1时d i / d t < 0 di/dt<0di/dt<0 i肯定是单调下降的,最终降到05 w' R5 m4 z$ S% {8 p- Z6 a4 _2 ]8 I

    $ I' q: |6 n4 d" p" u6 U2 K

    ( M7 \4 J$ l7 P" B
    , R9 f9 U4 j2 Q& X

    $ l8 V, _2 P% t6 c. ~7 a% v. a1 K+ p综上:* Y  T7 q/ E1 D) t% D7 K  L7 \, v
    想让患病者越来越少,σ \sigmaσ必须小于等于1,即感染期内有效接触使健康者感染的人数不超过原有的病人数.
    ! Y6 ~# P7 e' G5 ]* L0 i  U0 n* \& S6 Q& D: R- P. i
    4 w% Z6 [% H: Z
    这里我们分析的是感染之后还能感染的情况,但有些病毒感染之后会在体内生成抗体,就不会再被感染了,下面我们分析这种情况。! `$ D/ U( K1 S8 v( v% k, G
    0 v( H" u9 s3 G9 Z$ k1 g

    ' j, u6 C. e5 d模型四 SIR模型
    ' A& K$ q; W( Y/ xSIR模型是常见的一种描述传染病传播的数学模型,其基本假设是将人群分为以下三类:
    0 f, U8 ]3 j1 B! f7 Q% U
    / g  n9 j3 r) m+ V1 C8 X, }0 |
    ' I2 F* l" |) w  x9 Q
    1 易感人群(Susceptible):指未得病者,但缺乏免疫能力,与感病者接触后容易受到感染。
    ) o& p" l) E2 o2 ?* r' I) E" e0 o/ L* Z+ F% ~* F7 V; e7 O
    4 S  l0 X& F+ Q6 ~* s. d: l1 Q  H
    2 感染人群(Infective):指染上传染病的人,他可以传播给易感人群。
    5 t: P& B6 A# U  \$ W( q8 V/ L! x1 f) r

    5 U, R' ]+ Y; X$ ^) X3 移除人群(Removed):被移出系统的人。因病愈(具有免疫力)或死亡的人。这部分人不再参与感染和被感染过程。# o6 ]" f+ u) r
    3 \: d" S0 m1 |! Z; v5 q% {: C5 ^

    8 K! \6 o( ]! k6 L9 n假设:; ?+ k( r9 z* b7 f# D- s
    # D: [/ t6 I. j# z0 o
    * ]1 b- Y8 W7 i
    传染病有免疫性如天花、麻疹等——病人治愈后移出感染系统,称移出者(Removed).# u3 {# @8 W% {0 W
    总人数N不变,健康人、病人和移出者的比例分别为s ( t ) , i ( t ) , r ( t ) s(t), i(t), r(t)s(t),i(t),r(t).
    . D* C9 g$ B, ]* r* R- \病人的日接触率为λ \lambdaλ , 日治愈率为μ \muμ, 接触数 σ = λ μ \sigma=\frac{\lambda}{\mu}σ= 9 R8 i) {2 i0 ]3 W0 p
    μ) B0 y6 u  S1 H4 |) p
    λ
    # D. N1 J( D2 P' }2 r; ?​       
    : `. {' z& o3 t; H; v) l : Y4 o% r& Z4 d% q0 P- ]% S- a  l( y
    建模:
    3 W  t" V' B0 f' D: J# |- y0 |, t5 Ds ( t ) + i ( t ) + r ( t ) = 1 s(t)+ i(t)+ r(t)=1s(t)+i(t)+r(t)=1% ~0 U/ q' j1 X/ y
    这个就是病人减去治愈的人,和上一个模型是一样的( W- x# ]$ i" z0 y8 q3 u

    . |5 T1 w# d$ F2 O

    9 T! N# P1 I6 X- w; ~因为有治愈后是有免疫性的,所以可能被感染的总人数要减少,减去移除者就是9 G8 X) {' d5 y! ]" R5 R4 Z
    . d6 O& A" \- S. {5 m1 |( T6 j
    " ]. u; B9 e3 S; M6 I
    将上式化简为:
    3 J9 M$ o7 m. B! m
    ! {7 d2 u, w- F+ c/ ]. G

    + P6 z6 [* D+ e* e: Wi 0 + s 0 ≈ 1 i_0+s_0\approx 1i
    ) [4 y0 v: w9 {* D- R& ~6 `3 X; f: r" V( M06 T% ]+ W: _9 q7 m
    ​       
    . z8 W0 G) }& ?) b  o! w0 a) v +s
    5 s! Q7 U/ s9 T0  E' d, w# y; g$ P9 _% i% I
    ​       
    # z0 {6 j; n8 w1 t$ x% q; | ≈1(通常r ( 0 ) = r 0 r(0)=r_0r(0)=r
    $ ]! H0 g' e0 {4 [% C3 [0' b! ]" P9 L. t) s5 g7 ~
    ​       
    6 R: R1 D* C! G8 X% q7 O! F# @ 很小)1 J5 l' X/ b& v& s
    ! U( B0 H3 m& W% U; i! ]
    4 L8 Q* F9 g1 a4 D& U
    关于i(t) , s(t) 的非线性微分方程组,没有解析解,只能通过数值计算得到s(t), i(t), r(t)的曲线,下面来看下曲线的数值解的MATLAB程序
    & @3 e; ]6 G/ z% H+ l9 O! e) d6 R1 j8 p6 q
    % S) ?6 B/ \, y$ m& s7 |9 M9 C
    这里我们先设λ = 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
    . a1 d9 e) W/ G% e+ L# [1 Q8 }01 ~9 L0 n+ d5 ]
    ​        6 s3 m# m6 d# H( I! E/ o
    =0.01,s 5 z, Z* X( t9 ]) g
    0  z0 Z. L# s6 ?* m0 z  G1 k, Y( N
    ​        : a% `3 D8 U$ R4 h. A. e4 {$ a
    =0.99
    - m6 j. d- r, c也就是平均一个病人人传染一个正常人,治愈率为0.5;开始的病人比例为0.01,正常人为0.99,设没有天生带有病毒抗体的人,所以r 0 = 0 r_0=0r 9 R7 z+ [4 {) _. n5 k
    0
    4 J) J7 |) }. m* x​       
    / ^( E0 ^9 f, [- c =0,之后若果病人被治愈,则具有抗体了,有抗体的人为:r = 1 − i − s r=1-i-sr=1−i−s  J# u9 ?% p. ?
    # N- _  g: G+ e$ I/ r

    , c6 I" p2 @( X# Qts=0:40;* g7 L& A2 x( S! R& j" e
    x0=[0.01, 0.99];. d$ Z2 S9 H) R9 P- ?
    [t,x]=ode45('ill',ts,x0);' u6 R9 `2 T* ?5 ~+ ]5 \
    r=1-x(:,1)-x(:,2);" v* q( R5 F8 x3 D3 @
    plot(t,x(:,1),t,x(:,2),ts,r),grid* [4 [; z$ F; u9 S
    legend('i(t)','s(t)','r(t)')
    ( ]9 Z% [( M1 Z8 `! l" ^' Z) O& e" d0 X

    ) J$ y- i) S, k+ M$ d8 i5 Gfunction y=ill( t,x)$ F7 o5 h2 ^, D  C3 g
    a=1;
    $ Z, Y6 `/ `/ M: I! Db=0.5;
    . p* m1 l# \6 ]( Ay=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
    ' \8 r& C2 d) I/ ]% U; A' s1: k7 Y8 ]! L+ Y# I3 C
    29 I$ g4 m$ P0 i6 p- F! E; }/ F1 h
    3
    ( @6 }& |" l: V  U4! u9 W. }; F' G! D2 H/ R# }
    57 {/ n0 a' n  J% t
    61 f' l8 i- G9 k9 f! Q0 X8 U
    7+ c: Z! t  u0 s/ v1 Q  K
    81 U8 ^$ @- _) d8 Z3 r4 h
    9, T* y: g# ]; F9 I) M
    10
    ; U5 s% i: M( `; X11
    ! S/ D8 d& j. W7 ?
    8 ?2 E# U5 i) R
    / n0 w/ X9 p8 |. P% C: |' n
    可以看出:s(t)单调减,r(t)单调增,都趋于稳定, i(t)先增后减趋于0.. h2 w3 m2 u5 x. \5 i, d
    结果分析$ ]/ n1 G) }0 g+ M
    先回顾一下参数
    ' s4 }4 k) L+ z( g接 触 率 λ ; 治 愈 率 μ ; 1 / μ   平 均 传 染 期 ( 病 人 治 愈 所 需 平 均 时 间 ) ; σ = λ / μ   接 触 数 ( 感 染 期 内 每 个 病 人 有 效 接 触 人 数 ) 接触率 \lambda;治愈率 \mu ; 1/ \mu~平均传染期 (病人治愈所需平均时间);\sigma =\lambda/\mu~接触数 (感染期内每个病人有效接触人数)接触率λ;治愈率μ;1/μ 平均传染期(病人治愈所需平均时间);σ=λ/μ 接触数(感染期内每个病人有效接触人数)
    $ X- E' V+ }3 ^! I可以分析出:
    2 f8 n- l# T0 w
    . t& M9 l; r7 o; L- u) r' z
    % ^1 e, y; I7 U6 F: g7 v
    随着卫生健康思想水平高,接触率λ \lambdaλ变小
    7 W+ }( d* M9 c4 i, [9 R. k随着医疗水平的提高,治愈率μ \muμ增大$ q3 T0 ~0 n) W
    接触数σ = λ / μ \sigma =\lambda/\muσ=λ/μ减小——有助于控制传播.
    : b5 ^# f( U3 w5 W7 Y' B- |8 \% _我们可以试试稍微减少一下λ \lambdaλ,增大μ \muμ,来看下效果1 a8 }- Z% O' G

    ' b4 b. A1 T+ s  P& z( N6 S  g

    : S" L8 r. W2 R/ gts=0:40;* k' Y. v9 ^1 K+ z
    x0=[0.01, 0.99];$ [* _6 T* l0 M; ?) Y
    [t,x]=ode45('ill',ts,x0);
    & C0 {: j5 g" @5 P) j2 pr=1-x(:,1)-x(:,2);# q  p; k! m. X5 n4 X
    plot(t,x(:,1),t,x(:,2),ts,r),grid
    5 b4 A6 p3 @: Y. m/ glegend('i(t)','s(t)','r(t)')
    ' s' @7 k* H7 j! f# S6 e+ |$ a2 D4 _% w' A/ `* V" \/ T

    , J4 p8 Q" `4 @3 L4 ifunction y=ill( t,x). q1 V$ s+ {( w0 S/ e/ {* L' m$ H8 |
    a=0.8;* Z1 n9 x" J7 f2 ^+ Z0 Q
    b=0.6;
    ! T7 f! P/ d" J, s% A4 Ay=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
    & ^: [# J3 s1 N1
    ! `8 P4 z' b+ {6 G( d3 L1 V5 k2
    : }) G0 I5 `/ ?% D3* u. `, X6 G1 A
    4
    ! Q" P* k# Z5 S; a; y$ Z5
    7 u: R7 [9 \& G0 o# z! x. L5 u: s6
    6 U* M8 m/ ]# n$ ^  h7
    2 ^. \% Y7 [+ x' ~8
    * b* d) u0 v* @/ s: \* E98 ^0 h8 |# e, F% G) a
    100 }" J0 M1 ?" m
    11
    ; h) {8 w& J* Y' ^6 [4 b9 N- }2 Y4 ^+ B9 p

      a: g9 h  {5 W5 I" X" K综上我们可以得出结论:想要减少传染病的传播,我们就要在接触数σ \sigmaσ上下功夫。  k2 `% h! V1 p7 Y9 u
    6 ?, d  V/ B* ]
    # ~2 ^/ X7 L; b3 F+ I
    实战建模
    0 _, Z+ n3 ~7 W! A; s8 i数据处理$ u( ^2 q" B  A5 S* f; E2 j
    % d+ H1 }. Y8 z. o

    4 v- }8 z6 g9 G3 q首先,我用python爬虫爬取了丁香医生官方数据,一共5534条数据 特征包括感染、死亡、治愈的总数,当日感染、死亡、治愈新增,疑似病例,时间,省份等14个特征
      ?, Q( M/ h! ?5 J# W% |" g1 t- l  Z
    2 V" V8 ]( F( T9 U& K: Q, K
    & Z+ S/ w* T) g, _
    * U% m$ H* N% Q
    然后用python进行数据提取,提取了较为典型的湖北省的数据作为我的参考依据5 Q9 V9 ]( j5 t8 A% w$ S9 y
    ) y; k( [/ \& d5 k7 X9 q$ j
    ) A& N% }4 q/ y
    7 m3 u, M* {: E1 i+ m0 N  z6 E# C

    , J: w$ D/ [+ y1 ~( c然后用python对数据进行清洗,提取出了患病总数,现存患者总数,死亡总数,治愈总数,时间,省份这几个特征
    4 i  h3 f1 W- Z9 ?4 A5 B1 }( L: [* b, I

    ( F3 |& ~0 k! v5 K) w% f对日期格式进行修改,值保留月和日,并与死亡人数的位置交换+ h/ m, @2 c/ ^2 Z8 b

    0 V. c# p9 H9 M! v: J/ \
    5 O% \: }0 U8 j* U. }3 W
    这里我用python对提取的四个特征分别进行了数据分析(主要包括计算最值,平均值等,),并把1.20日作为第一天,7.02日作为最后一天也就是第165天,做了可视化可视化处理。
    3 C- R% Y5 ^; `8 U/ v感染人数示意图
    / Y' Y. z) n! n
    - p) U* v. z- M# S' p0 w
      n  ^! r+ H# ]% U. m" Q
    治愈人数示意图' ]. G+ p0 m% W% S7 \2 E
    5 c3 Q4 `7 N. m/ q( c5 k
    & x+ s) N$ o& J6 `

    + T$ @, Z5 b8 a4 Q6 q5 h

    - X2 t$ A; u1 j$ |) Q$ k; E7 M8 a现存患者数量图# D# x3 m# N: {3 P7 n; y
    2 B$ k1 ?% J8 ?& C: Q( W

    5 b% U' u- b4 n8 M" B* w死亡人数示意图4 h- q3 Z# V, G- Z

    - R2 w9 t( ?! ?1 j5 Y

    ( d5 G$ E# R( t" s/ d3 J+ N: A+ r: @' H& a  Y. `
    # E. I* w" u- Z6 K, e) R
    经过上面的图片与describe数据分析,我们发现有一天是异常的,患者多出了平时的十倍左右,经过查阅资料,这天因加强了检测标准,所以增多了很多。为了避免这个数据的影响我们选择将这一天删去(或者用平均数或中位数代替也可)6 g* L7 r! k4 k0 {" _! ^3 L/ Z
    将上面清理过的数据存放到csv文件中
    . {$ ]3 n! h3 q6 s  p1 c# q2 O1 B
    ! C, k% i8 K& r% {
    模型建立: [$ N9 m7 Z. q9 U( L8 b4 Q( t! `
    模型假设
    4 I* D9 F& o4 O, H8 m( r8 }经过上面数据的分析,我们大体可以进行如下假设:
    " `0 V9 G1 B0 y* X- F1.由于不存在封闭情况,考虑开放体系。- s+ y6 P. V6 g3 I
    2.目前数据以天为单位发布,因此不考虑连续变化情况,只考虑离散的方程。
    " O( o& I" N  S/ o3.新型冠状病毒的治愈人数和死亡人数相对较 小,因此只考虑 Susceptible(易感)和 Infected(感染) 两类人群。设易感人群总数为N
    % f2 n" e9 R* X) f4.经专家鉴定新冠病毒患者治愈后至少六个月之内不会再被感染,所以设治愈后移出易感人群。
    4 Q3 C5 i5 t) w5.设每个病人每天有效接触人数为 λ \lambdaλ(日接触率),且使接触的健康人致病.8 i* v/ R. q' U" Q; O. R
    6.设病人每天治愈的比例为 μ \muμ(日治愈率)0 V! U. c; G2 p! B) M& i1 B
    7.时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t).
    7 W6 R" v* h7 m- |9 u
      q9 E% J3 D3 o
    / y7 I0 b3 Q! x# ^* Z! T" {& S" E4 Y
    模型一
    / v& |( g5 {( Z: o
    7 b$ [7 n- @/ V1 v: _9 i2 @
    5 H  w8 }: B5 k1 }4 b) b4 w4 S: C# v
    分析可以得到移出者r(t)=治愈人数+死亡人数; T. R/ x7 R; }$ X
    通过python数据处理,我们算出了r(t)的值,并将其可视化. _3 t" S/ x" E, E6 X: u7 P& _6 K

      w8 G! h2 X5 g  D% @
    9 n/ n% l3 E* P& Y2 A6 ^

    6 I# y6 x* C; p& ^( X' d7 w
    3 ^2 |$ t4 J+ s/ [/ V8 A
    我用MATLAB对其进行了拟合,拟合图像为
    6 X% S0 |$ g( @7 N) k7 r
    ( e& K. y6 M; F

    3 \: l; o( o" e8 D) {! C! U1 n
    . r7 m6 H+ @) M) t

      O" S; y# Z5 ?1 u- U9 x$ m4 G. ]6 @( l* ]9 Q

    6 n( z: w- I3 x. c: W分析可以得到患者 i(t)=患病总数-移出者, g/ k( {( X0 |/ v2 Y4 f3 ^0 u
    可以通过csv文件的currentConfirmedCount 直接获得i(t)数据,当然也可以通过 i(t)=confirmedCountv - r(t)获得,对此我也做了可视化展示) K7 n7 V8 k/ _% V% T2 }

    / u/ Y" ?( _. `9 S1 V
    5 r& i% H! \4 W5 k3 o
    通过MATLAB程序对其进行拟合,可以得到r(t)的函数图像大致为+ Z$ {- ^% Z1 w* m1 X  z5 ~* P
    , v3 z' u6 k) V0 L# i7 J& ^

    9 D1 D( D" N! a! P$ T' [! E2 D  T+ `  l" \# m3 ~. ^

    ' i; N" G- `9 X7 E8 x4 E9 u$ a5 n
    9 l0 G" z1 u" Z* H, j' [2 b0 |
    为了方便,利于公式推导,我们先设时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t). 所以有
      s* K  o) C" ~5 ^7 K% F0 W1 b. |
    ' x6 w* w1 y  [* s
    / m8 x/ }) q3 D! S
    可以推导出每日新增病例的表达式
    : }- ^: a3 [# ^( h% N: X1 W" P1 n7 ]7 C7 n3 B6 O1 ?

    : E7 h5 n+ b5 z3 ^% U: ?7 m: y) `! g2 _# x% P; p% Y# C' n- B# L

    9 E! I- Y9 d* }5 I! g; M
    ) ~0 L# E" l, s+ |

    9 C9 v! ]+ f; n. b1 Y由以上两个公式可以推导出以下两个微分方程
    1 J7 ^) u: g7 Y8 r. V6 `& p
    ( H5 K  S( c8 H2 D0 Z% u
    3 F' U/ q0 [* d. A

    * P9 s5 r1 \: }# t# w, m# K

    # E  t: W# W5 d可以知道初值6 `' ~9 k5 O7 u4 z
    i ( 0 ) = i 0 . s ( 0 ) = s 0 i(0)=i_0.s(0)=s_0i(0)=i
      W: [2 D$ _6 U. ^/ c( X0
    - H3 X  w" j0 {4 U​        7 H$ v/ v' P% v
    .s(0)=s
    1 p2 v6 a) g# G0 P- r0
    7 Q/ ?8 G" c' F​       
    * Q( b' m( g% u
    1 c5 Q8 T" R# H4 ~因为一开始治愈的和死亡的肯定很少,所以r0可以看为0,于是就有:
    # T0 n) Q2 k9 ^0 g% p' \- ]) @' yi 0 + s 0 = 1 i_0+s_0=1i % W/ `8 y# \% F2 s) B; Y
    05 U4 [/ w2 d( o& U+ N
    ​        6 ?: V1 T' d4 B% [; G
    +s ! I8 R0 G3 e; d8 {( Z  ^
    0
    1 P3 [1 f. p% r4 \​        5 }/ e4 j. ^$ D2 v! B
    =1( `/ N; J2 E5 G; g8 i
    通过解以上微分方程我们可以根据经验假设λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)的值分别为1和0.5(也就是每个患者可能使1个正常人患病,患者可能有0.5的概率被治愈);由于一开始患者肯定比正常人少很多,所以我们设i0=0.01,s0=0.99。对其求解可以得到s(t), i(t), r(t),的变化图像
    " V+ `4 U! Q) Y5 ]; j
    4 @+ ^" Q0 Q  E( j
    ( i3 ~# b* h, B! N* C: |
    % |3 }" q9 I- h) Q7 p
      f1 t7 I0 u/ d& n
    MATLAB程序如下& u" K2 \* }$ C+ r  K+ v
    ts=0:40;
    4 K0 N) I2 l+ H! s  h+ Dx0=[0.01, 0.99];
    ( T) a9 p* G1 f( q$ m) H- G# ~4 _8 y[t,x]=ode45(‘ill’,ts,x0);
    ) h3 a- E9 ~' [  yr=1-x(:,1)-x(:,2);* \' g- t6 g0 ?9 h: e& a
    plot(t,x(:,1),t,x(:,2),ts,r,ts,x(:,1)/x(:,2))
    3 G5 n* K, d6 C5 x, clegend(‘i(t)’,‘s(t)’,‘r(t)’)3 R" }0 c6 F4 b7 A
    3 \  b  Z2 N8 ]5 o3 v+ Z; F

    ! j7 ?7 @( }9 T+ Xfunction y=ill( t,x)% T) Z1 ~/ Y: n, d
    a=1;8 ?% W) o) u, p) t
    b=0.5;
    5 i! D2 c( I) v% c  My=[ax(1)x(2)-bx(1);-ax(1)*x(2)];9 E$ W) [& z0 R/ w

    + e5 c& Z  y. e7 D1 u$ V. _& z

    + k# M* y- C5 Q结果分析:患病人数肯定有个高潮,但之后高潮就会减弱,并逐步降低为0。随着医疗卫生条件的不断提升,患者的 λ \lambdaλ(日接触率)肯定降低,μ \muμ (日治愈率)肯定上升,所以我们可以把λ \lambdaλ调一点为0.8,μ \muμ调高一点为0.6,可以得到以下趋势图。所以应对传染病很关键的一点是我们要提高医疗卫生条件
    - z( O# u4 ]& s1 H$ v, o) m+ r5 F) ?+ X6 i8 H% r) B" u0 D
    ! b$ f* l9 P; }+ @" a4 F

    0 ^- M; i6 B9 a3 l8 P$ i模型二0 @3 P5 Y5 G( J1 P
    / q6 D0 M4 l& D& |: u

    5 |+ {3 {" Z; q* }8 S实际上,λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)都是随着时间变化的,这里我们设s(t), i(t), r(t) 为第t天健康人、病人、移除者(病愈与死亡之和)的数量, s(t)+ i(t)+r(t)=N..
    6 U1 X2 A/ m" l1 I(t), (t) ~第t天感染率, 移除率(治愈率与死亡率之和)4 M4 x3 F5 J* W: m( L3 a/ M, O) |
    有 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)$ G6 v) F) Y( h" Z1 v6 k7 w
    因为s远大于i, r,s(t)视为常数,所以有' x+ N6 ?: U; U( J) _5 d
    8 u2 n' {8 k7 O5 V5 n& F0 x3 ^
    * N8 Q6 n4 m1 k
    . a  v5 }; ~, I' ]3 `

    ( D, p7 \3 C$ k: I% `' x1 O/ [取差分近似导数- x9 F" t$ c& d7 M: C
    . X$ {3 r3 [- s
    : n# Y0 Y$ X# p
      m3 }' Q, s  v1 N& N# j

    & w; L2 I! n/ m) o2 O0 V+ Q$ X& {# [我们可以先用真实数据对(t)进行展示并进行拟合: y8 @/ O) [) H" g' d

    ! |" I5 o; |/ w" U, m8 t8 w; p

    # H9 ^5 s  n% m, h' A) I9 t! W' t
    6 Q' w7 o# e* c% T8 B
    0 N& }8 Z3 e4 ], k0 ]
    当然同样的方法对(t)进行拟合: R, m- r9 G( X& V& x. N6 |

    - p. g) f" I6 w7 U
    ' J( C$ X  |3 s# }( r+ a# I! k
    做不出来了,好难,光这些东西就弄了四天,到了数学建模国赛得多难多累啊,哎,让我这个小白手足无措。毕竟还没有正规的培训,这个模型等期末考完试一定好好做做!!!8 b% X" F  E4 s! x8 y+ `' T: C# \
    冲国奖% ]  B6 U# K3 p- f/ m
    冲国奖; \- J" i% N( K1 s* q: Q. b
    冲国奖
    , H6 e; v; ^9 a5 T$ c————————————————
    8 X3 E. C/ ?: Y7 b0 E8 h3 R版权声明:本文为CSDN博主「小白不白嘿嘿嘿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ c* z1 ~. `: S7 U, }& d  Q
    原文链接:https://blog.csdn.net/weixin_45755332/article/details/107094630' Q3 P% T% N7 w3 }1 C
    ) s) @. d9 h1 q. T. Y( K: }) C
    7 B- ~5 m( s! A- U1 _$ d
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-24 15:09 , Processed in 0.353107 second(s), 50 queries .

    回顶部