数学建模社区-数学中国
标题: 用Python预测疫情发展 [打印本页]
作者: 浅夏110 时间: 2020-5-15 15:30
标题: 用Python预测疫情发展
什么是传染病动力学?numpy和matplotlib用python实现传染病模型SI模型SIS模型SIR模型SEIR模型
什么是传染病动力学?最近,在报道疫情的众多新闻中,相信大家也看到过一些来预测新型冠状病毒会导致感染肺炎的人数。你一定好奇,这个人数要怎么预测呢?预测人数又有什么用呢?
事实上,从学科方向来说,这类研究属于传染病动力学,就是用数学模型去描述传染病在人群中传播的规律,从而预测患病人数,进而指导政府制定措施和政策去控制传染病的传播。, M" o5 E9 A7 y8 u7 ]0 K, g
这类研究最早可追溯到18世纪Daniel Bernoulli对天花的研究,而我们今天所要介绍的SIR模型是1927年Kermack与McKendrick在为了研究伦敦黑死病而提出的,是传染病动力学中最基础的模型。
介绍了传染病模型的背景信息,不知道现在你对传染病模型更有兴趣,还是执着地对python更有兴趣呢?不论哪种,这篇文章会满足你所有的好奇心。
numpy和matplotlib首先,安装一下这节课我们需要使用的两个python包,numpy和matplotlib。
/ z3 t" v% t0 c7 pnumpy-是python进行科学和矩阵运算最常用的包。
用numpy建立一维数组,存储和计算每天传染病人数的数据。
1 c8 m7 x7 `, u* d/ {
import numpy as np
import matplotlib.pyplot as plt
用matplotlib绘制传染病人数随天数变化的曲线,给出模型预测人数变化的直观认识。
好啦,下面开始用python实现传染病模型吧。
用python实现传染病模型为了让大家能够更好地理解,我们先不直接说SIR模型,我们从最简单的开始。
SI模型首先想象这样一个场景,一个城市有 个人,假设没有人出生和死亡,忽然有一天有 个人感染了病毒成为了患者,如果每天每个患者能够有效传染 个人,那么第二天患病人数是多少呢?最简单的答案是: ,也就是说每天都会新增 个患者。那这样以来,在无限远的将来会有无穷多的人被感染,显然这是不合理的,那错在哪里?仔细思考,你一定发现了,已经患病的人就不能再被传染了,所以我们有必要把人群分为两类,易感者(S-susceptiable)和感染者(I-infective)(你猜的没错,这就是SIR中S和I的含义,R的含义之后介绍再讲)。为了之后方便计算我们记易感者和感染者在人群中的比例为 ,那么 。我们重新考虑上面的问题,顺便来个示意图:
Image Name这样的话,每天新增的患者数为 ,也就是总传染人数乘以易感者所占的人群比例。
$ g$ [- w1 K, l! w那么每天的感染者比例的增加量就是 。我们假设城市有一千万(N=10的7次方)人,每个患者每天接触感染每天0.8人(lamda=0.8),初始感染人数为45人(i0 = 45/N),我们来模拟70天(T=70)的情况。
# population4 f& U' r" P, [; k) w
N = 1e7$ l; L; o1 t' }2 s8 _ J6 }9 z3 S
# simuation Time / Day
' y Q' ~8 I8 _$ @T = 70; O6 `% t2 X+ t i( G- v$ s
# susceptiable ratio, a: M1 q# N/ V' s
s = np.zeros([T])" {" e9 z( r4 q. S: ^7 O: ^
# infective ratio
: K- C( q: R* N2 A, S" M$ Ti = np.zeros([T])4 M1 l5 N- P5 ^; b3 Z% c
# contact rate/ S. |+ B% F. G# e/ c3 R" q3 u
lamda = 0.8- @$ A$ s, T D0 t& w- I! z
" I1 u0 K) k0 J! R' @! j$ m# initial infective people
n: C& o8 s' R; @( ~i[0] = 45.0 / N, l- ]0 y4 N3 J: a& i* H
6 Z& F5 u6 W/ C: Kfor t in range(T-1):
1 X0 {, r8 h6 n' e/ o/ v i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t])* {9 _( L; D. H* T( w+ w9 R
/ f2 t# y& @* s# V9 G0 h2 J: v8 ?0 S) y/ q
+ ~- B, d5 v) ]相信其他语句大家都明白,新知识是这两行:
- ]; b1 k3 H% \7 Y7 W7 G, g' |" A C* T7 @2 |9 p
( A( s# Q4 A( j: J+ O/ L, }s = np.zeros([T])
$ ^4 f3 G" t( j, u2 u% yi = np.zeros([T])9 A* u6 X" I. H( l
$ N: V, O r: {$ N4 P! f
这两句话的意思是一样的,就是利用numpy(已被我们重新命名为np)的函数(zeros())来建立一个所有元素都是零的数组,而给的参数决定了这个数组的维度。比如:
: K$ `' U* C1 U& v) y! j& }/ f: C
, P, F1 ?3 @) n* h8 J# ma = np.zeros([2,3]); s! M' i/ _) C4 c3 x
a' M! {& ~3 a! h* F8 j$ f% f
- i4 w k3 n, e3 W4 K
array([[0., 0., 0.],! v( k% O! @1 g" c# M; i; y
[0., 0., 0.]])2 R. h, | @! K. g( c
. }* W% n: ?! k9 w4 L
/ J# |3 G# ~* g; I _) carray([0., 0., 0., 0., 0.])3 ~: P2 O8 u) k5 p- X6 W
* t6 i& [: B9 D' o m% O
8 f' ~) @( r, C/ u) L& h6 _类似的还有产生元素全部是1的数组的函数np.ones():
% x5 g' s7 O+ s L9 V' `( D. r6 e1 H; m2 h9 h0 w$ |
a = np.ones([5])
/ g) \8 @% l0 O9 o' }, da1 \, R) V% q5 z7 s
0 X5 Z+ F2 l6 l( varray([1., 1., 1., 1., 1.])9 ^1 h1 k. r) x% d* H( X
0 r; A' p4 [, D X$ ~
, o, A# e/ E3 j
a = np.ones([2,3]): ^5 f! |! f% K* l
a
" [! b5 [( V8 O8 N
! Y0 Z* [9 {% k
4 K q* x* Z' Tarray([[1., 1., 1.],; V4 |( C0 J, @
[1., 1., 1.]])
7 V% V0 ]8 ^7 h6 P; G. `
8 o/ f8 q/ d# Z' h5 p$ B1 E# u+ G
8 R, @- U9 j" P- h' [% gplt.plot(i)
& _$ P. D" z+ a
9 [- y" `! B/ j# B5 M7 e. D, W" w; K4 N% I
[<matplotlib.lines.Line2D at 0x7f0c2768d6d8>]+ b4 }4 {; C z. k
3 i8 E+ r& W- y9 f* c6 r- s. v' s# e+ s+ r
6 z2 C1 S* C* G
& l& d+ A' {; N2 k
. u9 D* |4 y, J- X0 V
实现SI模型的核心代码是第三个cell的第11,12行:
" X; l# ~/ s9 p* Y: @. t' Z3 } ]
: r/ f$ d8 |2 n- i/ p1 efor t in range(T-1):" K8 [& D+ s5 y6 U
i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t]). y; x) i5 w3 ?' W6 q. Q9 ^. {) @
+ p, c% Q( H( `" X* N. N2 m
就是我们建立的数学模型,利用python的for循环语句累加迭代的方式把每天的增加量叠加到感染者比例上。
运行代码完成计算,我们利用matplotlib的pyplot来画出感染者的随天数的变化曲线:
. T9 ]) M: J# o: ?9 l
fig, ax = plt.subplots(figsize=(8,4))# f. `. |: L2 e. u3 b
ax.plot(i, c='r', lw=2)
4 P% Z- A- R6 d0 h# b$ g6 Cax.set_xlabel('Day',fontsize=20)
! Q h& _5 Q0 ^. a" Q- Max.set_ylabel('Infective Ratio', fontsize=20) ]- e; r3 p3 f2 C" z5 m6 l: d0 K
ax.grid(1)
C3 R0 M7 Y. cplt.xticks(fontsize=20)
" `( v3 v5 D! a( y+ Jplt.yticks(fontsize=20);7 p7 D8 f% H7 g0 B; w
; G% ~- Q) ?5 ? o4 x- H2 W; b: }/ O+ b7 {' o+ E$ N( v; |

4 w, U' _) ^' e+ z5 s# E" p) o& D0 C* Z5 r9 l" f2 o
从这个结果看到,大约在25天左右,全部人群都会变成感染者,感染率 。
6 d) o9 l e* L5 }" I& Q# ]9 j: f在程序中我们假设每天每个患者传染0.8个人,你可以改变lamda的值,观察全部人群感染的天数的变化。
; \! y% G+ N1 j) c认真思考你会知道,lamda的现实意义就是该城市的卫生水平,衡量的是消毒,隔离这些措施执行得怎么样。回到传染病模型,按照SI模型计算的结果,我们全人类都会患病,这好可怕!原因是我们忽略了一个很重要的因素,那就是我们有奋斗在一线的医护人员,我们会被治愈!所以SI模型只适合研究具有高传染风险又不能被治愈的病(比如HIV)。
但是对于其他病,我们是可以靠医疗和自身免疫系统康复的,那么紧接着的一个问题就是,被治愈后还会再被传染上嘛?根据这个问题的回答不同,我们有了两个不同的模型,SIR 和 SIS。现在可以揭晓,SIR的R的含义了,就是移出者(Removed),现实含义就是指被治愈后不会再被感染的人。而SIS表示治愈后仍然还是易感者。下面我们用python来分别实现这两个模型。
SIS模型为了实现这个模型,我们需要引入新的一个参数,治愈率 。好啦,先上我们的新示意图:
Image Name和SI模型做比较,区别就是计算感染者的增加数时要减去被治愈的人数。
% b+ M7 p6 O% |1 G. S$ S' [$ {所以这时候每天的增加的感染者为: ,
( v( u. i/ C5 {) }增加的感染率为: 。' ^7 w$ N: H' u& g
模型完成啦,修改python代码:0 L2 M4 M4 ]; H" M z3 L
# susceptiable ratio3 V9 A( }3 u4 `
s = np.zeros([T]): C2 D0 [( T' I4 q. \: h# p
# infective ratio# F1 m+ J2 _) ?& G& d
i = np.zeros([T])
+ ~( _- P" u4 `* H* s( @" H- r4 H0 c) v0 \1 ^
# contact rate; D/ A. h5 K! C/ v9 E5 ~( g5 E
lamda = 1.0: \& {, g( b9 o
# recover rate2 @* k. n) a- g
gamma = 0.5
! D: u2 H+ M& X) M# M6 ^+ @ e) s y3 J7 ^, |. J6 a$ F7 V& E
# initial infective people
. e: o9 l4 V0 p$ }4 P3 ii[0] = 45.0 / N
' ?, h+ L ^$ P( Q, g8 I# N" J6 ^0 ?) s8 B) a( m
for t in range(T-1):
! F: R5 f# ?) \" E5 Y k2 ^0 M i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t]) - gamma*i[t]- Z3 i: a! L3 R
8 M( r. S" G$ ]7 K- O
6 g, _. T" y6 Y" ^
. h2 A! l6 z8 T% T运行代码,我们画出曲线(代码和SI模型的画图完全一样):3 g W7 n3 _) ]
+ N( e; K) e5 N! v' Y
fig, ax = plt.subplots(figsize=(8,4)). x* z2 \& b+ L0 E
ax.plot(i, c='r', lw=2)7 a+ m& J! Y; U0 T' N
ax.set_xlabel('Day',fontsize=20)7 c. N+ W5 b8 {# D% B
ax.set_ylabel('Infective Ratio', fontsize=20)
; p9 d. [& |( S, H& @1 `ax.grid(1)
: i1 |( `8 m2 b: k/ y8 a1 Y, zplt.xticks(fontsize=20)4 ]: c3 Z& p$ n- X
plt.yticks(fontsize=20);& M& o. x* V3 Y0 u" |
5 [$ D. t" \* B9 \1 d. W$ m
: l5 E/ r' Q' F6 \. M$ l
" B0 i! |& X4 d* s2 C1 _/ g
$ ^3 Z! c' @( @( q- q) u T# H
行代码,我们画出曲线(代码和SI模型的画图完全一样), { v3 {: Y: a6 a5 h; q/ g
可以看到,达到最大感染率的时间退后10天左右,最后感染和治愈达到动态平衡,人群中有始终有一半的人感染着。所以,SIS模型适合研究具有传染性和反复性的流行病,比如常见流感。同样的,感兴趣的话,改变lamda和gamma的值,观察曲线的变化。和lamda不同的是,gamma的现实意义就是对这种疾病的治疗水平。
SIR模型加入了移出者,被治愈的病人不会再被传染,先上我们的新示意图:
Image NameSIR 模型# _3 [7 o& I6 I2 `# M3 c, l
注意到这里,人群被分成了三类,不再只有I和S,所以相比于之前的模型,我们需要找到新的约束关系。现在我们需要分别计算三种人每天的增加量了:
- R! C) T+ x& E5 o% j- N
- 易感者:每天都在被传染,所以一直在减少,减少量为被传染的人数:
- 感染者:增加了被感染的人,减少了治愈的人:
- 移出者:增加了治愈的人:
h0 h( L0 \) ]$ K6 L; i) \
建模完成,修改python代码,并且假设人群普遍易感,新型疾病,初始没有移出者。
; O5 L- S {4 g% `, X3 y# population5 h9 \! W( E! Q- n5 F( k q
N = 1e7 + 10 + 5* \5 i/ ~4 E) l2 I; r Y5 B, `
# simuation Time / Day
( C. a# T4 a% b3 \5 FT = 170
$ U1 B+ A$ ^! \/ |( N$ h- Y, P. h# susceptiable ratio2 I, ]8 `, o+ e' l/ }) V( }
s = np.zeros([T])$ R# ], r* T# ]; {6 m0 q/ N2 J
# infective ratio4 g7 }1 m9 j8 p' f/ ^8 d: |# H
i = np.zeros([T]). R9 p- U% p5 f4 }% b
# remove ratio+ V. q1 t: k. r; r Y
r = np.zeros([T])
& _& P# z% j4 G) w$ b. N+ S
3 m1 z1 [3 O* L0 N# contact rate
) Z" o! M4 ]% M$ Ilamda = 0.2586
; X6 ^$ m. D5 R6 X# recover rate5 P" k. o9 U1 N X6 g: d V+ y
gamma = 0.08213 D5 J8 q+ D0 F) O$ U
7 c' a N1 E5 w3 B; F( n: i
# initial infective people
8 q9 }2 I4 Z+ Xi[0] = 10.0 / N% I4 }8 A- t# }
s[0] = 1e7 / N
) Y5 f8 e7 S3 E1 o3 c; T7 Z% @ ifor t in range(T-1):
% A5 f8 W3 a ]+ D7 |2 L i2 y) ^ i[t + 1] = i[t] + i[t] * lamda * s[t] - gamma*i[t]
4 P" y- q1 n o( R# R$ Q' O4 [. R$ y+ W s[t + 1] = s[t] - lamda * s[t] * i[t] i+ z, d- J/ f9 O. c
r[t + 1] = r[t] + gamma*i[t]6 M( J: y+ O% d# i9 n( s. {
4 g# D" ` T) J+ q0 dfig, ax = plt.subplots(figsize=(10,6))* V( `6 f6 S0 F+ I. p6 r/ V
ax.plot(s, c='b', lw=2, label='S')4 o: ?; p3 [# `* j4 k
ax.plot(i, c='r', lw=2, label='I')
5 A# W' B! ]( Y0 Uax.plot(r, c='g', lw=2, label='R')4 G: y3 l" R' p; r
ax.set_xlabel('Day',fontsize=20)" z" L& a- W1 g" g5 u
ax.set_ylabel('Infective Ratio', fontsize=20)8 Y, [! M1 ~* \& X9 M, r
ax.grid(1)
2 ]: X) i" X2 e. hplt.xticks(fontsize=20)
3 r' X6 ]1 R2 Y2 I5 Dplt.yticks(fontsize=20)
- V7 ]& y. _) Xplt.legend();
* `4 `: G1 ^( G T* I$ w. b: O% ?' ^
. O' I; {& x# C: X) l5 N9 |

- u) r; Z" G/ y' p5 Z
$ m8 {6 X, g# w感染人数峰值发生在一个月左右,最大感染人数不到人群的20%, 但是最终人群的80%都会得此病(就是最终的移出者的比例)。SIR模型适合研究没有潜伏期的急性传染病,治疗后能够痊愈并具有抗病性。
到这里,虽然不准确,我们也可以先用SIR模型来分析一下此次疫情,武汉新型冠状病毒的传染病动力学!
模型有了,其实就是确定参数的问题。一开始就有人做了这个工作:
Image Name于教授给的参数是参考了非典的, ,初始易感人数为一千万, 初始感染10人,初始移出者5人,那么我们的城市总人数 , 带入我们的模型得到结果:重现于教授的模型
8 |: V0 f+ j$ x4 j+ ~高峰和尾声日期的推测基本相符。
, R. t2 @' s2 D( z- A
# susceptiable ratio8 {4 k" B8 _2 W0 `- X
s = np.zeros([T])
v& |2 q7 l. b/ I: q# infective ratio- g. b5 z2 P, O2 v+ l- B
i = np.zeros([T])
, K n6 G7 _: a* e F8 p0 c# removed ratio
! [0 ^1 w' p7 X; fr = np.zeros([T])
: z s1 {. z; I; m- W# V, n" ]) t: V. x. g( i
# birth ratio
' W# W. q# e, t, Pb = 20.0 / N5 ]+ [1 T* H: f) f( a. {! F
# death ratio& o$ _6 L/ T; ^4 e4 C W. \
d = 10.0 / N+ o, r+ J% y# M9 [; M2 m7 J
5 p) ]: b. A% Z) d; ^# contact rate2 }9 h: q" R$ h) W8 C7 k' w v! b
y = 1.5" p* S0 T. ?8 _
# recover rate# @1 k1 z* @7 Z- b
u = 0.8 # 1 / infective_period
& e+ E6 o* r+ T) G, d
2 e. d& }" N3 H$ v. U# sigma = y / u
! D t6 z; @3 p8 h. f( e1 ?# w' |0 I+ X- n9 g% \1 @
# initial infective people7 U: Q6 @& Q- \8 s# [
i[0] = 45.0 / N, N" w, E) z- o( t0 p6 ]2 r, p# V
s[0] = 1 - i[0]. A( c) n' u+ D4 `5 k
for t in range(T-1):
, V9 n: X9 b; Q2 M i[t+1] = i[t] + i[t] * y * s[t] - u*i[t] - d*i[t] R# M# @6 O7 b8 v
s[t+1] = s[t] - y * s[t] * i[t] + b - d*s[t]
3 I5 o4 |" ~! d$ O r[t+1] = r[t] + u*i[t] - d*r[t]% Y2 @4 R( m& w2 y) z% f% X8 K
$ @8 ~' u+ o1 aplt.plot(i)
4 s. P) Y+ r; s) ^- Vplt.plot(s)+ B/ g: ~" {1 ]% w
plt.plot(r)! O4 T9 Q& w# w, l
plt.plot(np.diff(i),ls='--')
3 j& ^9 k1 b% W" g2 a. b0 F8 Z; t# Z, _+ {4 N8 b
# I, w. p7 o% L5 t- l4 m0 }
[<matplotlib.lines.Line2D at 0x7f77796e8518>]8 N5 ~5 [3 I' H* ~! o( F
; X6 `7 r) T, u7 `; l1 I

& l: N3 ?- ?2 f7 |4 D# V! b5 E ^
SEIR模型但是,SIR模型和实际情况的出入会比较大,因为忽略了太多因素了,比如说潜伏期,比如说政策调控,药物,出生死亡等等。下面我们可以和前面一样,把潜伏期考虑进去,新增一个人群,叫潜伏者E(exposed):
Image NameSEIR模型' K5 |9 g7 k6 p! b
同样的我们需要计算各人群每天的增加量:
S:每天减少: 1 W0 `7 M2 `' L* x3 [9 E; \0 K
E:每天增加传染,减少发病: 7 s) l% e* t+ |3 R1 p1 a2 l
I:每天增加发病,减少治愈: ) Y- E2 v5 k% C$ W5 o1 b
R:每天增加治愈:
" l1 T9 A6 C; G. r0 g7 i/ T建模完成,修改我们的python程序,这里的 可以理解为潜伏期的倒数。给的4天。新型冠状病毒给目前临床的潜伏期是3-14天。) @/ l. n7 {4 v
# population
/ n( T+ A; O: C# c- P( N; qN = 1e7 + 10 + 5
" p6 I1 r9 e! N" {2 X5 P# simuation Time / Day
2 u* O% O# v4 J! q: C' YT = 170( U, `7 b; f% n* Y# h
# susceptiable ratio1 b, {; g# v o. `0 @ U( ?
s = np.zeros([T])4 D( k8 I) T; M7 ~& ]
# exposed ratio5 R; D% ^* {8 K6 y5 A3 B% s2 y# {, r
e = np.zeros([T])
2 Z8 ]+ k4 c" J# `' B( X# infective ratio
) K) b% k2 s8 hi = np.zeros([T])
6 B$ m, I2 x& C, m" W. W, ?# remove ratio
+ T4 b* g) A) M5 ]$ J/ i# j! w9 Kr = np.zeros([T])
' n* j# Q6 T) q0 K8 M
( b5 y2 F/ H1 I& O& ]) u) L3 Z# contact rate
$ C2 }; t- e; y2 z- ulamda = 0.57 {, y" p1 R% G r- Q5 G6 V
# recover rate
3 G, T! C l4 {1 z3 e% Q3 F/ d5 egamma = 0.0821
0 d1 U9 I) Z. g$ f# exposed period
' J5 L( a. x: I- msigma = 1 / 4
/ X. M7 t( G) a5 g
" a& |; A* e/ f8 A/ f' H# initial infective people6 c# U1 A6 P9 Q: Q D v, U. ^' u" q
i[0] = 10.0 / N
8 v: H5 h0 q2 [$ C* r, _s[0] = 1e7 / N z, d0 [& D6 b: B
e[0] = 40.0 / N
& z; M* D1 |7 @3 E# g; w( Ffor t in range(T-1):
' ^- j! ~, Y2 ^0 D' D* Z s[t + 1] = s[t] - lamda * s[t] * i[t]
3 f9 ~0 ~( s0 K( l3 a. M e[t + 1] = e[t] + lamda * s[t] * i[t] - sigma * e[t]
- p0 f& W& Z, _ i[t + 1] = i[t] + sigma * e[t] - gamma * i[t]* r0 y! j) k% k
r[t + 1] = r[t] + gamma * i[t], G4 R' E/ z, r9 F! \: i
/ [5 V7 O3 C' ?: M' Q$ z- O0 \7 z
; m/ A( C6 n' Jfig, ax = plt.subplots(figsize=(10,6))
1 j7 y! `: V5 uax.plot(s, c='b', lw=2, label='S')! U& C2 j# g1 u: v5 p9 Z( ?! J4 I3 ?
ax.plot(e, c='orange', lw=2, label='E')
! c$ h; Q% O' i8 t1 E) wax.plot(i, c='r', lw=2, label='I')
, `, h* U+ X- Iax.plot(r, c='g', lw=2, label='R')
0 K9 J: a6 X# a* Y* I6 fax.set_xlabel('Day',fontsize=20)
/ b# t' l( Y( ^: c' ?0 d, cax.set_ylabel('Infective Ratio', fontsize=20)7 ]5 K; r$ V# U( ?
ax.grid(1)2 J G6 m) \! K; u; d
plt.xticks(fontsize=20), y r4 B+ Q4 T( E! {
plt.yticks(fontsize=20)
' o( ]4 r* B# G8 j" }: _plt.legend();- @9 p- P6 b4 E3 s: n
" f, @; s# d. b) ?- W% Y9 ]6 O

+ s% k$ C8 m& ^. U4 Z
5 b+ _" \1 A$ x L- n8 }按照模型的结果,此次疫情可能真的要持续到 三四月份。这个接触率 真的非常影响表现,模型给的是个常数,但是由于政府措施的原因,这应该是个变化的值。
" o* o* x" e6 D$ M2 H$ N还有治愈率 也是。没有完美的模型,但是随着考虑因素的增多,就会越来越接近实际情况,从而指导政府的疫情方针政策的制定。" U6 ~- c/ u% _+ z
+ ` @4 h& J# T; R4 x8 O9 m
. q& C! o1 A h d" o( i* {
+ `( }/ ]: R5 g. y; i% ]" k7 `$ ?7 Q, ], v8 V% F5 ]! z/ z
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |