QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:% Q3 Q& \! Q& v" I- ?' e- i
, ?" w+ b" _1 m
1.导入模块:
' U8 G$ V$ h4 G' A+ l1 _7 o( n/ F7 o2 ?+ H; n& e0 ?
   import numpy as np
7 p+ _9 s" @* b7 {5 C5 V   import pandas as pd1 c4 M5 H5 e% W$ A, M7 ^
   from scipy.optimize import curve_fit/ X5 ]  H& D* L- Y; t

9 S; [* L% `, g3 R! g9 t
8 u* b7 w4 p& N% t* ?0 d# E+ z2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。1 `% p% H# {# b; h

. r! p. ]" n, [! i" S' i" [# W% r0 r
3.准备数据:
0 x" R3 L; Q  E/ [
( X2 r  _' ?# e) a- P   df = pd.DataFrame({
) C& }$ b/ p, T2 C. L  \& `7 U       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
0 `3 k4 L5 Q2 W' i1 J0 J) a       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
, S$ d, s4 m- {' W! }   }), P/ L% p. {, ]) N8 q$ s) r% q: q
   x0 = float(df['population'][0])' }( m' \4 N% A, L2 f
   t0 = float(df['year'][0])
( w) o$ Z3 d4 ?% W9 B0 \8 ]1 S1 Y
6 S4 _9 Q, I2 v, y
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。* H. i6 Z% L1 ]0 y+ o
5.提取了初始年份和初始人口数。
& S4 c3 H- s1 Z9 ?/ X7 q# r6 W
/ E' G& l6 g/ \" }$ K* k7 n
! h0 S* q4 Q( t& H. g, t8 x4 N" k6.定义 Logistic 模型函数:$ o  |9 E4 M! k3 w! P# [
8 O  L- ^' T) Z' ?( d8 Z) j
   def x(t, r, xm):9 `( r2 h3 C/ I' \& e5 W* K' n4 F1 F
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
7 T$ L2 {# X5 v  D' m$ w) k, T/ S5 P+ B' U% h

2 E8 B6 c) s3 ^2 k7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
  r; e3 o" a% ~9 j6 |' W0 x  P  F3 m1 c: a0 a
2 i1 u$ W4 ?; N2 {# n. n
8.拟合参数:/ C4 k1 W, C5 o* ?4 p3 W, P
. ^* s  p& s* S2 f
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
& X% _5 d. z2 B( m( X7 b& Q& H' c   r, xm = popt[0], popt[1]
! @; Y7 m( g8 O$ R+ |% R* Y6 z, }4 Y6 u# r5 @' a1 u' U- p

) |1 d5 r4 K6 A& z9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。; Y7 X8 [4 k/ Y$ b
6 k2 G- v$ Y; l" i' z7 P1 r

3 I+ A; o# U" d( I10.预测 1900 年人口:, ~& [% y' s3 r

( L+ P" v+ B' B! C4 R9 Y4 G   print('population in 1900 =', x(1900, r, xm))' V3 S6 P) Z, ]# V8 P
1 ?1 L% m: d9 z: V) G/ P! W
( z, N: i3 }9 {- M
11.使用拟合的参数预测了 1900 年的人口数。
7 O/ Z( y1 |+ t- I+ F
  @1 s6 O3 c2 k$ v3 `9 o- ?
& j+ ^4 p6 H1 S% j* ]2 i12.绘制预测曲线:1 h1 P6 t$ f9 M: c

* m8 K# c7 R, [$ \6 b& n3 |: E   year = np.linspace(1790, 2000, 21), W' j3 ]* n, ?0 G, @
   population = [x(each, r, xm) for each in year]
* \2 ~* F9 u& B- H1 G2 |   plt.scatter(df['year'], df['population'], label='actual')
8 c. _0 B0 a' U   plt.plot(year, population, label='predict', color='coral')( m6 D* ~/ p' h9 I! A' [
   plt.legend()" A/ l$ A5 E" I  E
* n( f1 r- V, X7 U

  k# L8 J+ [2 ?6 m# m13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。0 u/ \1 k4 h9 V" K5 [4 t+ k
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
) |- m( `$ y. k, T  P, Z: H' A+ U; ^& |2 s7 A4 e
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
. h% x: x$ f; P# s. l( t3 N% N& a+ a

6 [9 u( h+ w# H5 S" ^9 A: ~( J) c

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-11 08:35 , Processed in 0.411821 second(s), 55 queries .

回顶部