QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
. `9 m8 Z2 _+ N" f8 R" V$ v& j& n$ f, b
1.导入模块:
. _) X* f8 P$ l/ S# H
% k6 n* E- \" m   import numpy as np& `2 G/ c: J* h% \. c1 b/ R
   import pandas as pd0 k7 q9 ^5 P8 E6 }" V
   from scipy.optimize import curve_fit
0 O6 x# u& K! R
3 h+ D" V3 q! ~2 L" t8 ~% a! d8 }2 U
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。, _9 B+ P' b. K; m: k  a9 T
, y+ m2 }# h# O  E, L

) M& X7 v0 Y% r3 y7 s& G3.准备数据:5 R1 C/ M! l2 r. B% ]
+ o4 b+ c6 ?/ t. W" k+ u
   df = pd.DataFrame({( @+ C1 w: e% w9 K. H
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
; R- L1 y$ Q0 q% ]+ Z* }6 b       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],) A+ F1 w5 ^# w) D  }, k1 r1 U
   })
& B. c' q$ t0 E( z" b+ F   x0 = float(df['population'][0])
+ H: V% \% D; F8 p' ?   t0 = float(df['year'][0])5 O# W; g( d& U/ G
0 B& U% k* e7 D6 E, d  u

  G" Z7 K4 C) _6 Q$ z6 y: D4.创建了一个 Pandas DataFrame 来存储年份和人口数据。3 f4 N0 M* G4 {2 i- ]
5.提取了初始年份和初始人口数。
9 N/ w0 G* e, k9 E: U$ b* J, ^. m5 f* j' O. h! E3 u
$ i  ]1 `" n- ^9 E1 C. t
6.定义 Logistic 模型函数:7 R# |0 R3 x& Z) {* X; f4 O9 e

9 y; x8 J  P& m2 b   def x(t, r, xm):
/ V: `/ P( `. t% `. S       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))0 h; Q6 Q2 k! W* H

2 \) n3 \& a' a; h" k( m, c9 ?' m4 b3 T& Q5 Y4 Y/ P) W: N- p" k
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
: s$ g* T7 P; E. Q/ ^
+ i" V$ }1 R7 b" H# w8 }3 I
" ^/ A; \% @+ b# W5 \8.拟合参数:
5 l  D7 ]' G( e! i0 D5 s
$ r* k, c' `; Z' j8 ?# v( X3 y   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
: K$ T  F& A& D: m2 b8 C   r, xm = popt[0], popt[1]
. T1 Q; }8 C& Y# A# H7 @% ~# J; g/ O& P0 F% a

6 |5 o3 i* q' L8 b- P9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。' F6 M- f  s9 {8 g
: t4 Z# A+ N4 I1 p! a5 A+ q
: @! R* @/ [; h' }) D
10.预测 1900 年人口:' y7 l& w  A" e, X( U9 i4 j2 |
. X5 M7 @# d- C6 J: A0 a
   print('population in 1900 =', x(1900, r, xm))# Y5 J3 x- U+ y% B7 ^

4 `4 [) K  u4 v& A' r8 d! q8 {. E
1 T0 h9 x' \$ T8 u" C: j, S11.使用拟合的参数预测了 1900 年的人口数。- @) x! _9 w% h

$ m( v* w' E+ c9 M1 L' T/ x- \  j, d6 M/ t0 n6 G
12.绘制预测曲线:
! j) K7 K$ ~! Q% n7 h9 v! r! [1 E6 P3 q, j  b! _1 f: G  v) A1 _7 s
   year = np.linspace(1790, 2000, 21)
* B* v+ @' b9 ~4 o3 N$ y* q8 M   population = [x(each, r, xm) for each in year]  d0 g& z* _3 j0 c  w; O
   plt.scatter(df['year'], df['population'], label='actual')
9 i, `- Z! ^. y* O6 j3 H   plt.plot(year, population, label='predict', color='coral')
1 F7 Z. w- H5 d3 o- W4 Z; @   plt.legend()
2 B7 l7 n: B; ]* l% b& c2 P8 [0 k" S; K
3 |! @( \1 v0 b$ r/ o5 Q
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
# }: _9 e) R" M  _9 N7 M+ ~14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
3 x8 J1 }7 O  M, Z; g( _$ l$ ^, ?
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。$ T& Q6 x9 F7 W4 }
  `5 K3 R' j' n, W

) y1 F+ i$ @/ }$ r$ J4 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-7-10 11:58 , Processed in 0.269005 second(s), 54 queries .

回顶部