QQ登录

只需要一步,快速开始

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

numpy 实现Lesile 模型

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-17 16:43 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Leslie 模型是一种经典的人口增长模型,用于描述一个有性别、有年龄结构的人口在不同年龄段的增长和变化。它是由生态学家 Patrick H. Leslie 在 1945 年提出的,被广泛应用于人口生态学和种群生态学领域。( E0 a4 j" _5 V2 L/ w' L1 [. X: U/ }
Leslie 模型通常假设以下几点:# S* r0 y( e  K& W; G6 [  L

; b9 U- Z( J. y; D& ]% U1.人口结构: 人口被划分为不同的年龄组或年龄段。
* J( I/ b& Y& ^5 L5 g2.增长率: 每个年龄段的人口增长率可以不同。
% B& u) t4 f: N) A3.繁殖率: 不同年龄段的个体具有不同的繁殖率。% Y/ [; i% A2 l' l( n: \4 W
4.死亡率: 不同年龄段的个体具有不同的死亡率。5 `) A$ G$ ?2 m" k. s
Leslie 模型的主要应用包括人口预测、资源管理、生态系统稳定性分析等。通过调整繁殖率和存活率等参数,可以模拟不同情景下人口的增长和变化趋势,为人口政策和资源规划提供科学依据。
9 C6 J" U+ L9 Q; c0 z- i7 u4 S- f  S3 ^* F+ I
接线来我们来实现Leslie模型* p1 l+ c  A3 v! _) s
1.定义数据:
) h/ b/ l1 E1 s+ R
! ^  |, f0 {& g/ M: F. i: l   alpha = np.array([0, 4, 3])
3 r9 Z6 z5 r& {' J5 e+ r* Z   beta = np.array([.5, .25])
1 v+ M* v2 v1 N: ]1 E% S- d0 x! k; R& n0 H6 I" J
   L = np.zeros((len(alpha), len(alpha)))
+ C1 _, Z8 a& Q) w: U- ]. Z   L[0, :] = alpha* o5 n; {1 B1 d0 q- {
   for index, each in enumerate(beta):
! B8 k, w* I+ {0 o( p% }3 ^       L[index+1, index] = each
  `4 }/ T' ~- J  K4 H9 k' b) c0 L. ^, R% f* [  n$ \6 X+ V& e
   x0 = np.array([1000, 1000, 1000])
" a; m1 F# g/ s# P; l( t- u' g# V: ]( ^

" }5 N+ y, ]( a4 {5 g' ?+ a+ s1 d2.定义了初始条件 alpha、beta 和初始状态向量 x0。
& u9 Y/ }5 V+ T3 Z+ k5 w) I' E3.创建了一个转移矩阵 L,其中第一行为 alpha,其余为 beta。* L4 C# _# n* N/ M8 `! O3 x, e

. P+ R7 _* U  Z) L
" A5 t; z; F$ W4.迭代求解:
2 S- w0 e) |+ q. U- a) ^2 V" K. U$ G
   x_list = [x0]9 r0 B" J8 B/ j' ?! i. s- e
   for i in range(5):
2 `& p- |: W" J) T$ _       x_list.append(L.dot(x_list[-1].T))+ y) }' Y, d/ N# p# W) j0 x

! Y3 d' P5 E8 l% Y: Q5 H  W1 n# W; t
0 t3 F0 R4 a+ P1 ?, D7 h, {1 Z8 g5.使用迭代方法计算了未来 5 年的状态,并将结果存储在 x_list 中。& E* \. Y0 A( |+ D8 c# w

0 a! k. z, B: a5 H9 L4 E: }; p2 c7 j+ j6 w* k! d
6.打印结果:
( P# b5 g( K5 X4 @
7 J  P1 O. ^! J! F1 Z: e. ^% I0 o   for index, x in enumerate(x_list):. G% q8 r  Z; j) h
       print('the {}th year: 1y: {}, 2y: {}, 3y: {}'.format(
/ ~, R$ T9 K- @* o: W; g7 C4 u! a. d1 P           index, x[0], x[1], x[2]))' W* y1 N( q" h2 F! t! m

! k# ?# O# Q' R9 Q. E( f% e( R; f; K9 g& I3 Y9 f7 T/ s; U
7.打印了每一年的状态向量。
$ u: I! c5 i$ d8 ^; G( t' {" B
/ p( s6 ~* ?, i: f
; c# x; r3 X) ^8.绘制图形:  Y- q6 ?. W! F6 y$ e; [

+ X  l) b: ~. X" @# b8 m   year_list = np.array(range(len(x_list)))
2 W# A4 j6 e% l. f8 g   y1,y2,y3 = [],[],[]) }% a1 I3 w. y& m
   for year in year_list:
+ s: b, F$ T$ W! d- \  G       y1.append(x_list[year][0])/ m  i1 E  g9 G) y; V( b* m& k
       y2.append(x_list[year][1])
2 X; ^0 F% M; j6 g; X       y3.append(x_list[year][2])5 z& v: O% M! U
2 j5 ?8 z* |! P  x. q( d
   w = .3& I$ S$ p; V. [7 z& d+ S
   plt.bar(year_list-w,y1, width=w, label='1y')7 c; m3 o# Z* N" |& J
   plt.bar(year_list,y2, width=w, label='2y')
  j+ z/ |, c- M7 q: h2 V   plt.bar(year_list+w,y3, width=w, label='3y')
" S! s9 B& e/ \   plt.legend()
; g/ Y" _  D* v, `0 {! J8 g
: h+ p( @! q  l. e6 }$ [9 V9 a' j* f! n* R% n+ L, M  t; `6 \& i: I
9.使用 Matplotlib 绘制了每一年不同状态的柱状图,并添加了图例。: I  y) ?0 D& T  x! v9 u

' l( Q9 ^, r; E9 ]; }1 ~这段代码的主要目的是模拟了基于给定的转移矩阵和初始状态的系统状态随时间的演变,并通过图形化展示了模拟结果。
7 u* F* x6 f3 b) c, [. `+ s
4 x, D7 Z4 S8 D/ G( b5 N
3 f$ H+ w9 e/ r9 |: f. d+ 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-6-14 21:16 , Processed in 0.586892 second(s), 51 queries .

回顶部