Leslie 模型是一种经典的人口增长模型,用于描述一个有性别、有年龄结构的人口在不同年龄段的增长和变化。它是由生态学家 Patrick H. Leslie 在 1945 年提出的,被广泛应用于人口生态学和种群生态学领域。 T/ [$ v* A% l+ }4 @% S2 t% V! L
Leslie 模型通常假设以下几点:; ^/ P4 O) N& R' M
9 V$ m9 A: a+ Z- k
1.人口结构: 人口被划分为不同的年龄组或年龄段。7 p/ R' N1 C, c- V1 @" H
2.增长率: 每个年龄段的人口增长率可以不同。 2 v6 k2 [) a/ ]; ^ _; z3.繁殖率: 不同年龄段的个体具有不同的繁殖率。9 b/ V2 H4 r4 F' d; {1 b5 [5 D
4.死亡率: 不同年龄段的个体具有不同的死亡率。 6 A1 U. R$ \4 u& HLeslie 模型的主要应用包括人口预测、资源管理、生态系统稳定性分析等。通过调整繁殖率和存活率等参数,可以模拟不同情景下人口的增长和变化趋势,为人口政策和资源规划提供科学依据。$ C( n; r. ^1 x; t- X e0 |
# d1 e, I, k0 X( |% Q
接线来我们来实现Leslie模型6 `8 O. d. J+ C# H
1.定义数据: 1 ~( @" `8 F2 a 9 r. B/ a, d" U7 S9 T2 m alpha = np.array([0, 4, 3]) 0 a2 m, i$ @% L( g% C beta = np.array([.5, .25])) z) s" l9 k% E3 D, V, t
" N5 f, `3 }7 k8 E- g L = np.zeros((len(alpha), len(alpha)))% t& v8 [0 C1 @4 ], j. [8 {6 J' Y9 P
L[0, :] = alpha & w' r: [* Y1 I y. s for index, each in enumerate(beta):" T7 Q, G7 a' x1 \
L[index+1, index] = each/ G* Z8 I( h. ]3 B3 h9 j0 C! X6 F
4 ?7 Y' J- F+ b" ?; o, U( u x0 = np.array([1000, 1000, 1000]) 8 I9 S& @ S/ y! s% ?7 V . I+ y- W, s' l! T4 Z7 W1 v9 U5 Q7 W+ z. f7 `$ w' F4 l
2.定义了初始条件 alpha、beta 和初始状态向量 x0。 P! S7 s" i( \
3.创建了一个转移矩阵 L,其中第一行为 alpha,其余为 beta。: K9 R C- ^, k, n* o7 y
+ ^: b% v# t: `; k7 [; J
5 u# F* ~6 s0 z N/ t" F# ?; @
4.迭代求解:2 ~: T+ H( c, I2 d1 f3 `. i
9 F Y0 Y% z/ V5 \1 [+ T# N' h x_list = [x0]0 b. }: U j+ \- ^) K
for i in range(5):% |% H0 U4 s5 }( T6 e7 q
x_list.append(L.dot(x_list[-1].T)) 5 W, z1 C6 o) s+ M+ W9 f0 w) j8 ~( q9 T+ W) f l
% N1 P# }3 ] _, a: k
5.使用迭代方法计算了未来 5 年的状态,并将结果存储在 x_list 中。 4 [ L3 i% M% l! c% h2 v . k: v" l5 c/ F2 L7 h5 i- e; W6 H& q% X
6.打印结果: / H+ r# b: J \: k/ m0 X9 a& ]% x R4 ~6 a7 `/ U0 Z' V
for index, x in enumerate(x_list):& ?+ }) ^0 y7 d! X& H6 O2 z
print('the {}th year: 1y: {}, 2y: {}, 3y: {}'.format(9 l5 a9 l# B( w I. [8 t. @: `9 V
index, x[0], x[1], x[2])) 1 ~5 o6 l/ f1 n: N+ V& M0 T6 x( k ! O) M6 H" Q( {4 i! J3 v. T3 }2 h/ q0 E! U; l' l
7.打印了每一年的状态向量。% b7 L6 }) b' D) I! d6 J' h) n
! |6 `1 `, M5 D/ k6 ^6 }4 }
, {$ K' A+ }. p7 ^; {
8.绘制图形: ; w7 p6 J" A- n# X5 {5 I: a+ n ( `" T# G o4 |% V1 L! ` year_list = np.array(range(len(x_list)))7 c1 ]" A0 Q! L* W0 s/ _4 x
y1,y2,y3 = [],[],[] 4 i' z0 b" c/ v8 z% F' t7 d3 q for year in year_list: : Z# U( ^ f6 ^ y1.append(x_list[year][0])( h7 p' x6 \5 f' O. A
y2.append(x_list[year][1]) $ g( [7 |4 H: G* Y y3.append(x_list[year][2])4 B$ S( x- x" N! D% d1 }% I
& ]0 }/ I$ t b8 }7 E5 L, F( D w = .3 8 b% O+ I& d) M8 O plt.bar(year_list-w,y1, width=w, label='1y')2 d$ r' r0 {, j' ^
plt.bar(year_list,y2, width=w, label='2y')8 F. Z% n$ k% O0 o. s* r' s4 y* a
plt.bar(year_list+w,y3, width=w, label='3y') * @1 G/ ~; C% U" K) G2 ]/ \ plt.legend()9 a8 x% X# h/ c. D" t+ r6 j5 L