- 在线时间
- 791 小时
- 最后登录
- 2022-11-28
- 注册时间
- 2017-6-12
- 听众数
- 15
- 收听数
- 0
- 能力
- 120 分
- 体力
- 36392 点
- 威望
- 11 点
- 阅读权限
- 255
- 积分
- 13878
- 相册
- 0
- 日志
- 0
- 记录
- 1
- 帖子
- 616
- 主题
- 542
- 精华
- 12
- 分享
- 0
- 好友
- 225
TA的每日心情 | 开心 2020-11-14 17:15 |
|---|
签到天数: 74 天 [LV.6]常住居民II
 群组: 2019美赛冲刺课程 群组: 站长地区赛培训 群组: 2019考研数学 桃子老师 群组: 2018教师培训(呼伦贝 群组: 2019考研数学 站长系列 |
问题的提出& c# ^& X$ ^0 ~
医生们发现,在一个民族或地区,当某种传染病流传时,波及到的总人数大体上保持为一个常数。即既非所有人都会得病也非毫无规律,两次流行(同种疾病)的波及人数不会相差太大。如何解释这一现象呢?试用建模方法来加以证明。
' N' A- i: j" [ @5 y7 M/ }- y, j* l5 i' q
指数模型: a! k+ C9 K( D: ]5 B1 s/ r
定义已感染人数为i(t) i(t)i(t),假设每个病人单位时间有效接触(足以使人致病)的人数为λ \lambdaλ,那么,在时间段Δt \Delta tΔt内,病人的增量可以用如下的公式进行计算
% N3 ]1 c8 k# P- c; t5 b, u5 Pi(t+Δt)−i(t)=λi(t)Δt i(t+\Delta t) - i(t) = \lambda i(t)\Delta t8 Q# {4 q2 v# R3 N. S2 F- [% g
i(t+Δt)−i(t)=λi(t)Δt
f/ l0 f2 i( n9 @9 z8 D4 U" X1 G) b) v* q* ~; ]- r0 J1 G' q1 M
将i(t) i(t)i(t)移到等式的右边,我们得到如下的递推公式
8 Y1 x! _5 f1 l! B$ L, Di(t+Δt)=i(t)+λi(t)Δt i(t+\Delta t) = i(t) + \lambda i(t)\Delta t
& j4 @' o* X& M9 {6 Hi(t+Δt)=i(t)+λi(t)Δt- v3 {5 h) I9 `$ ?( C9 h7 T# i
6 {2 S6 [$ z1 |以上递推公式意味着,我们可以通过当前时刻的病人人数和致病参数λ \lambdaλ,计算得到Δt \Delta tΔt时间后的病人人数,将以上思想在Python中进行实现,代码如下。, b# e8 i: X% g5 t3 C& K
" O9 G( B2 `+ S4 n7 `5 S" Himport matplotlib.pyplot as plt
5 h6 \4 U! N/ C6 t1 a& N3 j%matplotlib inline
. q! Q7 E; q! Q. d$ C+ Y! UdeltaT = 0.015 c# o- H& s2 E7 h
lamb = 2) y3 K) o( l6 j7 ?; z8 g; l d
i_list = []
3 X+ v$ L$ e. W# Yi0 = 0.08; # 初始有8%的人患病3 O6 e/ U+ k6 r- t, h
i_list.append(i0)
* ?) O3 z# P' ^3 M$ t2 {Tot_Time = 101 w9 [, y- z0 h9 z8 W
TotStep = int(Tot_Time/deltaT)
& q7 F* L4 Y) e##
' W3 i8 ~- r4 G( G( ?3 |3 C3 Cfor i in range(TotStep):
9 s6 B$ i: X5 T; ]- w, M( ] i_new = i_list[-1] + lamb * i_list[-1] * deltaT
! `' s* a9 Z! y3 [" j7 ` i_list.append(i_new). S! e4 K, j3 T# s9 V! E
plt.plot(i_list)
p* B, A. E. ]! {3 L
% @9 m" }9 _' T- O( |1 \) @将以上代码在Jupyter Notebook中运行,得到病人人数的变化趋势见下图,从中我们可以看到病人的增长是指数级的,在短短十天后,已经有3000万人患病!这显然不符合实际情况的,那么问题出在哪里了呢?0 ?7 Z! X( U5 _" u4 a# l8 I1 }% w
7 o' S: @# }( k) ~8 }4 L( O0 u" K/ X8 D, ?6 O$ |
实际上,若病人解除的是病人,并不能够使病人再次患病,实际上以上的算法导致了重复计数现象的发生。解决办法:必须区分已感染者和未感染者。
. D, {' \ M& V& [& H- H8 }- u: Y! ^- \$ O' @1 G4 N! r
SI模型( f8 J* M; w% z( `. ^- A
现在我们将人群分成两个群体:已感染者(病人,Infected)和未感染者(健康者,Suspect),该模型称为SI模型,模型假设:
0 m4 Y. ^" G9 D: \* I% P2 j6 [# h9 ]7 B# ^) \
在研究时间内,不考虑死亡率和出生率,即总人数N NN不变,病人和健康人的比例分别为i(t) i(t)i(t)和s(t) s(t)s(t)9 j" w, D$ U w0 a* n
每个病人在单位时间内有效接触并致病的人数为λ \lambdaλ,且只有接触健康人才会致病,称λ \lambdaλ为日接触率( W4 ~) E! C% {1 A% }
仿照指数模型里面的建模方法,在时间段Δt \Delta tΔt内,病人的增量可以用如下的公式进行计算) S' c: \9 N9 P
# o, ^3 J; f$ r8 P8 MN[i(t+Δt)−i(t)]=[λs(t)]Ni(t)Δt N[i(t+\Delta t)-i(t)]=[\lambda s(t)] N i(t) \Delta t$ O- W& k3 V* ]& z) d
N[i(t+Δt)−i(t)]=[λs(t)]Ni(t)Δt1 ?6 i9 D# V' \
8 j! i) n) A% a4 H+ z* n消去N NN,再将i(t) i(t)i(t)移到等式的右边,我们得到如下的递推公式4 u4 G: Y0 L! U: j9 G* P; s
i(t+Δt)=i(t)+λi(t)s(t)Δt i(t+\Delta t) = i(t) + \lambda i(t)s(t)\Delta t
% V ]# K( ~$ [i(t+Δt)=i(t)+λi(t)s(t)Δt
% t1 [# L. D5 P- o# s+ [, x( s
. y) @; x% \4 y" N! E' ^. l$ I7 L: c同样地,我们可以通过当前时刻的病人人数和致病参数λ \lambdaλ,计算得到Δt \Delta tΔt时间后的病人人数,将以上思想在Python中进行实现,代码如下:. U4 x0 [& F! t
; @9 E0 E, |) B' `& ximport matplotlib.pyplot as plt, ~8 M. i' ?) Y- X/ Y
%matplotlib inline
1 O) I- n& O9 DdeltaT = 0.01
" W- ~5 A7 T1 s& _lamb = 2
5 v7 w# {! _- o2 j! b& i% k8 C- ]i_list = []
8 ~8 D( F. Q9 Js_list = []
+ g9 `- h1 H. o' di0 = 0.08; # 初始有8%的人患病
+ i7 K/ s5 z# |& ^8 b0 hi_list.append(i0)
9 F' V- I$ Y8 I- U- o2 s/ }s_list.append(1 - i0)' {4 c; k# }. E3 i; k$ F
Tot_Time =5
6 ~; y$ A/ p K8 w- VTotStep = int(Tot_Time/deltaT)
/ C9 m/ \3 _' I# v7 P7 ^8 X## 2 [ p$ _$ P2 l/ Z" e' M# ]( Z9 k
for i in range(TotStep):
5 G7 S3 ^! W9 l W i_new = i_list[-1] + lamb * i_list[-1] * deltaT * s_list[-1]0 Y7 I8 q8 g* Z2 @- X
i_list.append(i_new)
$ p; V% I+ n5 V( F s_list.append(1- i_new)" {( V- n) [$ [
Time = [i * deltaT for i in range(TotStep + 1)]
0 D. q6 ^% a; R( m! h2 Nplt.plot(Time,i_list)4 V9 P- w* F5 a* j
plt.plot(Time,s_list)
3 c+ ?* o* B) ^: _& d% B Aplt.title("SI",fontsize = 20)( c' f: T- k l3 x! T' K* i, D/ l
plt.xlabel("Time")6 \( N. \% x+ Q& d" R/ C. S
plt.ylabel('i(t)')$ n3 \. t4 u8 W. B( m
, D& a# O* q9 T+ v3 ?0 i
从SI模型我们可以看到,病人比例不再会出现"指数爆炸"的情况,在t→∞ t \rightarrow \inftyt→∞时最大患病比例为1。在SI模型中,病人数量的增长曲线是一个典型的S型曲线,又称为Logistic曲线,该曲线在生物学上经常被用来描述物种的增长模。
. a5 X- q& t5 N7 o4 t
& R: k {$ t* x3 c然后,SI模型的结论告诉我们,无论λ \lambdaλ多么小,最终人群都会患病,这显然也是不符合实际情况的。 i. R: l8 t" b7 x- C: X* G
————————————————
+ C" ]9 ~; u, G5 c( E版权声明:本文为CSDN博主「任公子ha」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
& }2 I5 ?* O% ?" V9 \" w( D$ r原文链接:https://blog.csdn.net/baidu_26746963/article/details/93918383
, h) P& J1 ~, r; f2 @* Z: R3 K2 y9 j( j$ I, B3 [9 W
& Y" x" z" m+ p% s8 G
|
zan
|