QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |正序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:* g6 A3 H- t6 i0 P

6 g6 ^& L  U0 m- }" A3 J2 E: g; s1.导入模块:: F) h3 x: ?% [% T" C
. x5 w& b7 H. u$ C
   import numpy as np* D" m$ S" ]2 T& y" [4 Y: k
   import pandas as pd  w5 F- p( }9 A4 o/ T  J
   from scipy.optimize import curve_fit0 T. g; e) ]/ q& u# b: k6 g
# p  y: H6 t$ @! t5 M
: T7 J% @) G. |* E; d
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
0 e" I, `7 Z8 Y0 U
; k/ V8 F: k7 t" T9 n; t( a) U" m! b6 ?+ {! @# y. B
3.准备数据:
1 e& s% _% Q- {; y6 e8 T3 [6 I
# T( g( N& r/ R) K   df = pd.DataFrame({
! D) @  h, l  h) L( Z4 w  k  i  k! }( |0 ~       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],: }3 E! i- }) m4 w( G
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],! @. q* X7 O. P+ O) S; g9 c7 P
   })
2 n! ?6 R( c8 ^& m3 h+ K' T- B   x0 = float(df['population'][0])2 M9 t8 V$ g) G$ n
   t0 = float(df['year'][0])! @0 `% W9 ?( R$ [1 {7 f' {+ ]# J

6 E' r* r) ?$ k) q& T! f9 b$ {5 s" Y
  I0 B' a1 a7 U5 G" u8 v4.创建了一个 Pandas DataFrame 来存储年份和人口数据。: e4 U/ Y3 \0 [9 @; U" c6 `
5.提取了初始年份和初始人口数。
) I% B) ~7 G1 V4 J# X' U2 v  A4 R& H" r
9 F1 s/ @1 P( C7 V7 D! i3 j0 [9 d
6.定义 Logistic 模型函数:
$ M% L9 g, h/ }$ G8 {) X9 f0 h3 K5 W& U
   def x(t, r, xm):- Y! n! K: g( r# f) p
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0))), ]; B  i* i, B1 M

: P4 Z1 ^6 ], z2 p" l# |. m6 r5 U+ F8 c+ W  p1 i: g0 y
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
# v9 F+ ~4 M# g, A* N2 s$ c/ \, k* B9 J" B! C. J
& J" I8 b3 y" X5 L+ }3 W
8.拟合参数:1 F1 P9 B( j0 o2 j8 e

" R6 y& a, ^, r: R% S; s/ K4 F   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))4 v( m4 d& ~% D9 n
   r, xm = popt[0], popt[1]% P$ b& l( N5 q

' q" C# i* r+ X4 W
. ?5 z3 I8 }* Y- P9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
% ?/ O1 t- r& C2 `. M2 y* M+ U0 o& r% A' R2 x6 N. `

2 _/ I4 U% z% J, Y  r  O1 n10.预测 1900 年人口:& r  ~& j1 |: x8 i1 l
; D6 F( _  }# \  I+ C* ]
   print('population in 1900 =', x(1900, r, xm))
4 p5 n# O# U. @* _- g! q; X1 ]  h( U' Z
2 h( f/ D& f/ z0 F, _2 s
11.使用拟合的参数预测了 1900 年的人口数。5 o+ a& G: b2 n2 Z( ]' [) s

1 O: E3 _  _3 Y* S
% I; ?  q: H/ ~* m" O12.绘制预测曲线:
' L6 s1 Q! v. x% l7 N" r2 }# ^2 G9 c9 Q
   year = np.linspace(1790, 2000, 21)
+ Q( o8 F% S3 X$ z% @   population = [x(each, r, xm) for each in year]5 G$ g3 ]5 z3 t/ E. r% b
   plt.scatter(df['year'], df['population'], label='actual')
# m' v3 x/ _9 G' P! u; }* v   plt.plot(year, population, label='predict', color='coral')5 ^) ~1 s- @: h- x/ a& [) a7 w( F, L
   plt.legend(); c5 X0 {! q9 v! q+ Y

2 _& L4 u5 S8 s$ P3 l8 g9 n2 ]: Y* Q- M) K! ^5 M$ [7 f5 s* {
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
! Z) V6 ^9 `9 d5 c+ O, v2 \& X6 F14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。5 t1 w/ P/ r+ \: R$ }, r

, H+ T; V: L5 I6 A0 F! \5 R这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。) S+ M$ @$ F4 }; C' o7 {  L

5 ]$ Z1 s6 T  N9 S6 _+ L4 q  i5 I/ J$ a% `# K$ W

13.logistic_model.py

1.13 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]

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-21 03:53 , Processed in 0.404593 second(s), 56 queries .

回顶部