QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
, u  x4 r' R1 i" S4 Q' o- `7 c; n, R8 }  t% O( r
1.导入模块:5 {. Y. |; A8 d7 f
' z* _# J# w& B3 I
   import numpy as np
8 C* ^+ a8 o' C; V6 J/ ]* b   import pandas as pd& ^8 O. @# r4 `: f5 A6 L
   from scipy.optimize import curve_fit
! @% C" C7 G+ D# b8 V2 J' j6 b! {% X; @0 U  N

2 p0 ^4 F% u  {! K. B2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
4 a1 O0 o9 A, O$ t# R) {8 T3 ?' n* s! L
/ \* s: L6 Z4 h# F7 `. n
3.准备数据:+ E+ R0 L5 W( m- w7 E

  c, k3 M( y1 F5 p   df = pd.DataFrame({
' f4 O7 _/ M1 f+ v9 g       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],7 |3 Y# S( |( ^9 s* r( r
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],( G7 |3 \3 C+ t! v! R5 i3 T7 w
   })
( ^! D) N1 f9 Q0 u1 o   x0 = float(df['population'][0])3 h! f% g/ N3 H  F# b& \
   t0 = float(df['year'][0]): n6 g/ `7 }! C" [# b- `- {2 N

  E# s7 L( K$ {; g+ m
" c6 y' v/ M% w/ B- b' A4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
2 Z9 ^/ q; {5 k$ K3 o* N4 O, ]5.提取了初始年份和初始人口数。; O4 r3 B5 e* \7 l9 w. l
* _  z% H$ _3 w) [

& G( E# l2 t" E9 Q9 R6.定义 Logistic 模型函数:
; j8 R, a3 Z1 B, B" ]. C
7 n9 w5 S1 Z9 p# a5 t   def x(t, r, xm):- ~1 D! K; p7 w1 M/ R7 g" O
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))5 ^+ ]1 Y- H  u+ y8 \  |8 L
" f" C) p- d# J. L5 q) q7 W2 m

( K: p# Z- T6 W4 n5 _7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
. B6 E. y4 w& j7 x/ [0 F# J
; z( g7 d* U, U0 F7 @* n
, r8 I, Y1 u2 j4 }/ z( F: G8.拟合参数:
3 W- J7 O% Q) E. Q+ F! u0 ^  a% x- @4 e4 Z; h# \" ~' _+ Q
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
3 t. q# C5 v$ ~. H8 ~6 n   r, xm = popt[0], popt[1]# P+ S# P  M7 o1 A# ^+ V
* ~, S; ]2 }  Q; U! q" e# Q

8 X7 _1 A0 R9 C/ Q  \9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。& k9 N5 F3 u/ f  G8 x. p

) m1 O8 {8 `6 Q) P6 d
2 k* {+ m# \% l7 J10.预测 1900 年人口:
. N  X' I5 ]/ P( a# r( M9 D5 ?0 T- ?: h- q& |
   print('population in 1900 =', x(1900, r, xm))6 ]8 R' w3 [5 N6 p" n1 g  e
0 x+ {$ [* x2 P, K
9 m0 I: m$ v9 z  Y1 w, H
11.使用拟合的参数预测了 1900 年的人口数。2 V; \1 P. o+ D# E8 g
5 }8 f( _9 i9 h7 y) M' O

  c6 l; ]0 I" ]9 Y12.绘制预测曲线:
: S/ Y$ b% x  I" A; _# W: j6 X) d2 R4 }! |
   year = np.linspace(1790, 2000, 21)$ |! M# C, X' T
   population = [x(each, r, xm) for each in year]
) e0 u# P* [7 s/ y1 [  h   plt.scatter(df['year'], df['population'], label='actual')  K" c, t( ^/ `
   plt.plot(year, population, label='predict', color='coral')6 f! z1 A4 F) M9 Y1 H! f
   plt.legend(), B) ]  h; j) I
# t5 g% b; \6 g' z. T# ]9 z7 ~5 D
2 W$ w2 A1 Y7 ^) N
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。2 Z2 O* @; c+ B) q6 U$ ?
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
9 y6 y7 {1 z+ A5 \8 `; [5 e3 z% ^/ F7 f: T: D6 W4 {' J; F
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。: d! k* \  F: j" E( A- o. Z
( F/ B9 o% O+ y( u
$ E4 D1 o4 s+ \& v" W$ }2 g# ~

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-25 22:09 , Processed in 0.420011 second(s), 55 queries .

回顶部