QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:: q/ E2 W. X* J) y
5 f/ n' b. ?+ `' @$ b" F
1.导入模块:
, Z; M0 D0 S% K# O4 `8 m. o3 F$ p0 `) M" V6 ?+ w
   import numpy as np. \  \: j6 k( Q, V- y
   import pandas as pd8 G$ q- {! s) D' l: J" }
   from scipy.optimize import curve_fit: f$ F: `/ {# c" m( P3 M6 t
) L1 R! V9 U0 ^
  i$ \5 h5 t6 D& F' X  c+ L
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。" k" T- B9 @& A! `) W

4 r) p% r9 D1 P& r/ F8 c2 I7 E# ~" g
3.准备数据:  h8 I9 b: ~. U7 J
" G0 ^0 p3 E$ J0 i- n
   df = pd.DataFrame({* j+ ]' Q/ i; ]/ |
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
4 L0 C0 C# e  M5 l9 u8 [- t       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
% G8 Q3 C0 s: G   })1 e- O' ]: w0 H" |+ P# p7 k& V& Q
   x0 = float(df['population'][0])
  P9 p+ X- S6 O4 @( |   t0 = float(df['year'][0])
% }" D- Y9 q* S$ B
0 M# G/ y# F. s* D) F, W7 M/ N6 p. S* j
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
* |$ K1 m3 J( p% F- K5.提取了初始年份和初始人口数。6 V6 J4 v) G0 w$ H
$ t( c: Z/ }) c9 K  t! B) y
8 v' b! K/ Z, z
6.定义 Logistic 模型函数:/ u( T" n8 x! I+ g3 n
6 _# j% y% `, `: U3 j4 v
   def x(t, r, xm):3 M4 L& ^7 d$ N4 a, F7 N
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
+ a9 k; w& u, u- Z5 Q
8 M4 i: N1 _: X& |
! G# {- b/ k1 e+ e$ U. s# V  }7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
6 }: d+ g, d( d* D& @/ [" I2 n" _* J% S/ E
0 K5 n. x# x0 w: H/ K
8.拟合参数:) c0 e5 s; U0 U$ E9 A
' i; K# n* \1 h9 n0 h
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))7 L( \( J7 @. I  @# W
   r, xm = popt[0], popt[1]
' U" B, d( e! I, W2 ~2 D  }# u5 o' Z" t) W
4 }1 y6 J/ x7 m% F! V1 l
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。2 v/ ]; i. f* x1 P! Z
5 l" j# r. w' \( I  Y* N

- u2 ~' v/ B7 m" d  U) C/ `  R7 e10.预测 1900 年人口:
9 i8 P7 [9 h  G, J: A$ G+ v
: C: n( Q* f$ c   print('population in 1900 =', x(1900, r, xm))( T9 s, f6 }; v, a8 X: h7 F% u

1 U& J3 \" q& C0 W( ]/ ?- u% o* t
* E+ `; X4 E/ W0 e, `+ p- G2 M0 Z11.使用拟合的参数预测了 1900 年的人口数。
' B( o: K& b2 e- Q
5 v% f% f+ F6 F6 J# B& V- S' ^) ~- Y. Y+ S+ \
12.绘制预测曲线:& ?+ l0 g, c9 j
' \5 a- j8 I8 M4 C) l# {; O* P- `
   year = np.linspace(1790, 2000, 21), u" G0 f9 b4 @
   population = [x(each, r, xm) for each in year]! }$ ~6 n; y/ K' S2 R4 [1 D
   plt.scatter(df['year'], df['population'], label='actual')' `3 {) h6 M1 o* j) ]' l4 K; f
   plt.plot(year, population, label='predict', color='coral')
4 F! j, s3 T( s- `   plt.legend()
" Y. c2 K. ~% d; T6 {0 f4 N& e5 M" K4 r& E. @  f6 O0 ~' O& j
% q" g" O) n7 @. J
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。* j2 K6 D: N# s3 ~# r: Y% J! [3 F
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
( K, \( @; Q5 o& _0 `5 a/ x& o4 m
  t5 U. L) _7 C) m, N: t; t1 _这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。1 G0 C; j& H6 ~% _
; |6 v9 s! |; t
- n9 X3 r# ^8 l

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-8-26 00:38 , Processed in 0.322854 second(s), 55 queries .

回顶部