QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |正序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:0 y1 h" I! l: w8 M9 M. c+ a
* b1 r" i! {% A
1.导入模块:* n; Q4 W# ]9 o# E% m2 R# S) \
! v# v2 L: h4 c! S- Q* H
   import numpy as np" m; f& L  j8 I2 g" t
   import pandas as pd8 i5 x" k5 Y) }$ a* Y: H: f' K. w
   from scipy.optimize import curve_fit9 X5 W. c, L! V# t

$ @8 o. X  B0 y9 I3 c  g# t
- B* L) ~- W: E" ?* z. j: A) u  E2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
, B# Q4 T. U: }# g  X# B1 ]
6 a- o* J+ ], J3 B: E: U8 T+ s0 i4 Y. W( l  A- s9 u# J5 @# k
3.准备数据:  o8 F0 U9 K& |6 y! `9 O6 L, `
, Q# o- R, ?! a# V' h2 q+ l
   df = pd.DataFrame({1 v$ j- Z- x3 M& q, b, I$ s
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
  D1 j; n, L8 @0 u% O" ?       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6]," o8 [; V& z8 C9 v+ V
   })6 \+ O  |$ F/ G5 m0 z' ~5 F/ G$ @
   x0 = float(df['population'][0])
3 M0 }3 @0 _% P2 k5 o6 v   t0 = float(df['year'][0])
/ |9 `9 i0 |3 b" m9 |$ b
2 |% z+ @! f: H$ Q9 f1 i8 {
, X! T+ m# I2 D5 P/ ?4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
9 g4 g1 l% o" _( l7 y5.提取了初始年份和初始人口数。
! t8 ?6 g' Y8 T  Z, L0 m# y7 C
3 J, Q& N2 h. x; G6 t& t
6.定义 Logistic 模型函数:6 _! W, {7 S; {% F* ]) _  D  p: {
0 Q. {! O$ {* ~6 z+ \
   def x(t, r, xm):9 r/ y9 _. f4 w% Z
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
+ M7 ?& e+ x1 C' d- a! _% w2 f
6 }% q- H" X7 K8 Y' f
+ n7 D+ b9 c! p1 r7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
) B. P6 v! _7 T6 r0 J  x; S* p% V- ^, d2 _1 P2 C

. t9 R  q& p7 W- n1 h8.拟合参数:
1 g  ^% a& @- Y* L; o( L( E
! M: t1 T1 T# h3 i. b% C. {   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))+ h8 [# l( \; d+ H7 T% S0 ^5 C6 O  ?  P! K
   r, xm = popt[0], popt[1]
4 c7 A% f: F% h+ _4 L9 \% h+ @, K
  {  ?5 @/ O/ `* K
9 J: o2 P, v; h1 M5 }8 R9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。  P7 R1 j5 [# L$ U; R3 U

8 Y; x3 }7 L/ A1 e  u
" p+ {" |) [7 y$ o# M10.预测 1900 年人口:
3 e) i$ `. B* [' ^9 Z
6 x/ ~, F# M" \- O  [% N   print('population in 1900 =', x(1900, r, xm))
3 x1 V" A- |$ A* p- t* g
  u( G' ^, a3 I- i  ]6 ?
. @; z/ _2 d' q11.使用拟合的参数预测了 1900 年的人口数。
; H9 l6 R6 S# w' Z8 p6 n( q' }% w5 U: T/ V9 A

: n2 @  e& h: b; {3 h( ^8 G. x12.绘制预测曲线:
$ `0 h6 U7 L6 J% w% P. x( p" c% ^) I* I: C( J( t) e
   year = np.linspace(1790, 2000, 21)4 n  d5 E! s. s) l, J2 I
   population = [x(each, r, xm) for each in year]/ ]6 Y9 z1 Q" ^/ p( T3 j3 P1 X7 U
   plt.scatter(df['year'], df['population'], label='actual')0 o  q' f) c% W! h
   plt.plot(year, population, label='predict', color='coral')
3 W+ p& O) k6 {9 i' w2 r1 J   plt.legend()3 d5 b8 S/ V, S+ s& }& g- L

7 B# X  Q: Q: T
& P4 \; ~) B  X8 |8 d: M13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
; f. n/ q; {+ {/ G2 j4 y7 i4 d, L14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。% _* P; P3 I' U% M3 p1 Z1 y4 L! E
- j7 h; `) m8 H/ ^( c
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
$ ^# @+ `) W/ H7 l! r
" c/ f* q/ t( e6 c$ L; l. D
3 }( H: a; x4 [# d: }

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-9 07:09 , Processed in 0.285096 second(s), 55 queries .

回顶部