QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
3 D, \  c( q" ]3 |% f; ~* O
7 V; a" ?1 I2 @- h' O) G4 O1.导入模块:
4 g4 \& K3 X0 U) J/ s5 m& O7 D* T, I! K" e2 V
   import numpy as np
) H7 h# `  r8 V5 x   import pandas as pd
- x& i: H. k$ P' O5 A   from scipy.optimize import curve_fit  D* G$ U% E. L) l
8 I8 Y6 e9 a* H: H1 L9 O/ k$ _
! H: p. A, `4 g1 r. Y( f) A; V9 ]
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
, V, e* t# V3 Y1 U! N
* l- b( b7 w# u- P  r2 \7 l2 ]2 y4 V, P- s$ {( `+ ^/ _  x
3.准备数据:* z2 [. J1 c/ [' L% f; ?( |
# N) O8 D6 p" x$ e
   df = pd.DataFrame({
8 |6 r  b% Z& J. Z% @6 ?       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],% i1 z- i/ Y$ g3 W1 T4 L& K
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
' ^( k' A+ u) m# u   })* q$ ]: j# I4 i( M6 Z
   x0 = float(df['population'][0])* P. _. f7 ~* P4 l
   t0 = float(df['year'][0])
7 v* u. h, j9 r; A$ a6 e
, K3 Z5 T% O) X9 g+ n3 d/ O8 ?( `1 [9 k7 I8 _) Q  C
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。$ k! @+ n2 t- G9 ?
5.提取了初始年份和初始人口数。2 B- l& I- K* _
3 ~9 _; @) q8 w3 t9 {* o
3 L$ }3 D  k+ [! y. s
6.定义 Logistic 模型函数:/ H" V* Z/ T& C' k* D' `8 Z

7 I3 O" M4 U6 ^# T# E2 {1 d. I' P! k: C   def x(t, r, xm):
5 V1 d& E& [8 k4 y1 N2 m. S. {& o7 n       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
; C, L0 C" @, e( {& a; F5 f; P# N; p" H" W% n

8 m/ U) J8 J; |" g) q7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
. v6 \/ r) J, u4 H3 i9 w( G- }9 S( m+ Q$ O1 T0 J) `, q1 @4 O3 C
, M& l: v! V7 ?  T' Z
8.拟合参数:) h1 x0 L9 c1 \6 m8 X0 H
& }# m; T' v# O% O+ ?) V- L8 V/ z. Y
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))! q; |5 B$ S, ^6 H8 d
   r, xm = popt[0], popt[1]& y  K5 m  A+ I# \7 p! S8 H
$ l# D1 C* o$ u
/ u& V5 R$ o3 v# c, U
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
! g' c9 E' O* |" z6 ?; ]1 Z" ^: J; [2 r) Z. A$ |
0 P+ r: m  ~/ X) [1 d" z
10.预测 1900 年人口:" E( E. ]! b- P. \% u; s  |4 S& O

+ O$ _- x' b- B" K   print('population in 1900 =', x(1900, r, xm))% e! X- E# ~# h; S0 S$ @
9 i1 u  x' E/ h4 w+ \

2 c& I+ f1 q5 g7 Z3 n11.使用拟合的参数预测了 1900 年的人口数。& c5 d3 A; t9 v. G/ ]

3 W8 X# b: }" K, x5 B% n' q! U2 s! W9 T2 h  T
12.绘制预测曲线:; q1 t, I1 n) C% b
& h1 C7 y% ]( k/ q) B! \" }
   year = np.linspace(1790, 2000, 21)
' Q$ q+ T* ]9 k7 l. C9 \   population = [x(each, r, xm) for each in year]6 j' L% p7 o  I
   plt.scatter(df['year'], df['population'], label='actual')( M0 R, t. n, u2 v
   plt.plot(year, population, label='predict', color='coral')" }. ~9 u6 K* e) t2 R$ N
   plt.legend()
$ M& W( F$ l/ a3 Z4 O
* _; V1 w2 L2 |) H
; I8 y! h9 q4 A7 s, ]2 B0 n% i% f- u13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
$ q! d2 Q0 i) o& F4 n! o14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。8 u5 p, S5 o% Q& J; X8 h

/ v  \- f. B0 ^8 k这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。- f* W# F; x/ G- X

1 @, h% o% |* [. u9 U( f; A5 i* e, U1 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-4-14 12:04 , Processed in 0.436347 second(s), 54 queries .

回顶部