Leslie 模型是一种经典的人口增长模型,用于描述一个有性别、有年龄结构的人口在不同年龄段的增长和变化。它是由生态学家 Patrick H. Leslie 在 1945 年提出的,被广泛应用于人口生态学和种群生态学领域。( g& }7 V6 i% _! n
Leslie 模型通常假设以下几点: & P9 a/ Y8 R# [$ e3 z$ Q 8 A, F6 U/ h, u4 a1 Q1.人口结构: 人口被划分为不同的年龄组或年龄段。6 c# H# g; m1 G) I& ^6 o8 T7 p
2.增长率: 每个年龄段的人口增长率可以不同。& r' D$ ~; W& K' ]2 C+ h. M
3.繁殖率: 不同年龄段的个体具有不同的繁殖率。 F( J" G" _* i9 b Z: `4 Z
4.死亡率: 不同年龄段的个体具有不同的死亡率。 1 B M$ `* V8 c/ eLeslie 模型的主要应用包括人口预测、资源管理、生态系统稳定性分析等。通过调整繁殖率和存活率等参数,可以模拟不同情景下人口的增长和变化趋势,为人口政策和资源规划提供科学依据。 ]" r0 u3 @' o# P8 o0 K# R
% `, L; k5 o; f5 D" v接线来我们来实现Leslie模型 9 K k# }' X7 M2 v9 A1.定义数据: " Q8 @ r' y2 v4 K9 g4 m$ s( F" U8 @
alpha = np.array([0, 4, 3])! f: E" O$ ]. ]" [, I6 G
beta = np.array([.5, .25]) + ]" @9 G" [2 M" p . _/ G/ H N; O+ @4 k L = np.zeros((len(alpha), len(alpha))) 4 i1 q8 \! W" V1 _ L[0, :] = alpha 5 C2 o/ g! z7 O6 I) I for index, each in enumerate(beta):5 M7 a# s+ | e4 I7 {
L[index+1, index] = each / U7 H1 O5 B9 r0 s2 H' h" H# V. d/ g 4 b |% R5 W- V" z! o8 C9 u* { x0 = np.array([1000, 1000, 1000]) % ^: ]: O7 T9 h( q) a* X) w! V8 l, B1 j4 {- T
& p1 r) L8 I& M) p
2.定义了初始条件 alpha、beta 和初始状态向量 x0。 7 P) W4 s6 ~8 j3 J) M/ n3.创建了一个转移矩阵 L,其中第一行为 alpha,其余为 beta。 , ^% P% U- i' X% K: q% M7 z $ Q( L/ z2 o# r; d& J , X8 \. S }8 Y3 p+ _4.迭代求解:2 v3 Y/ R0 m) u4 z" N% B6 \( ^" P
# m; `, Q. C- Z! Y5 W x_list = [x0]' q* o1 X' ~. v# o/ a, I0 c# |
for i in range(5):6 `# B c1 b$ c q" r- ^' g
x_list.append(L.dot(x_list[-1].T))" ]$ s* s& D5 O9 h; a! x; W
. h- s8 {, a9 \" O) z* r) F
. e! N3 @' {3 j: e; d. x
5.使用迭代方法计算了未来 5 年的状态,并将结果存储在 x_list 中。; U. |. [3 \3 K
7 I; h5 y) @9 w: {8 x4 A4 U: z& _& \' d5 ~7 l7 v
6.打印结果:) A. M9 t! X H" _3 ]
& }7 W; p5 ~6 l# H, o for index, x in enumerate(x_list): 2 p' h, i9 S c4 K print('the {}th year: 1y: {}, 2y: {}, 3y: {}'.format(' A5 A! ^) d) r' F
index, x[0], x[1], x[2]))0 D. f; a8 f5 P: i% X
8 @* g$ {* |7 k / K0 m: b! W4 y5 c4 M6 Y7.打印了每一年的状态向量。 6 U6 @6 K# } g ( @2 J1 ?/ g+ {" f- z$ S" u. g! n( g* ~! U) V) o
8.绘制图形:3 S' `# L+ L/ X8 k: P8 U1 w- v
( R m N. k+ r3 H c
year_list = np.array(range(len(x_list))) 9 [- V8 }8 }1 H8 u( u& B! g4 k' O) U$ @ y1,y2,y3 = [],[],[] 9 K" k- I2 J' s7 T& x for year in year_list:* ]& B0 N1 P- r1 e4 C; K" s' ~
y1.append(x_list[year][0])& G/ P$ L) W8 b% s6 A- x! @
y2.append(x_list[year][1]) 2 U* h+ {/ P: B, O% C y3.append(x_list[year][2])2 R/ i# L5 n& J% G& r
8 M9 F# P# T6 A) K+ P
w = .3 ; c" }' T7 f9 t! Z5 d: {% m plt.bar(year_list-w,y1, width=w, label='1y') $ l: }% d( a* ?9 k) ` plt.bar(year_list,y2, width=w, label='2y')8 t. |+ T; {- x2 A
plt.bar(year_list+w,y3, width=w, label='3y')( {- W$ R2 J( J7 G' I1 f
plt.legend() 3 z, S" Q, z$ N; A7 N1 J1 `) y4 E/ e4 Q# j2 Y8 `- t