QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1188

主题

4

听众

2931

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
1 E7 ^; h% c6 N1 p' N9 }( w4 T3 H1 B% g6 x8 W9 o% }5 M/ q" O
1.导入模块:5 [3 ~" `: C# {3 P0 l$ I) a6 M& }
8 a, P6 h# ?6 d) m0 F4 l
   import numpy as np4 ?6 N# k3 u2 r! D5 V
   import pandas as pd
4 d1 u, I! F" w1 P0 d   from scipy.optimize import curve_fit
+ \, H/ @- V. J- h- O: i1 s1 M0 Q0 n6 V
9 a  V! t* A# {9 y. l' b
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
1 J8 ~/ l0 F5 z5 k- @
+ T* }* Y0 E6 C; Z7 S5 F
' u6 v% Y7 h  ~6 Z3.准备数据:
" w; x1 e+ C1 E; V8 ^. m6 x3 g) P7 K% `9 j) ~! k
   df = pd.DataFrame({
8 X2 ^2 M! h2 j" [! c' A3 }% b       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
: V5 H! N. `, a- H  W) J: `       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],/ }! [9 E" b' ^
   })# |. _; E3 Q& e. F
   x0 = float(df['population'][0])5 m; x$ d, {3 N
   t0 = float(df['year'][0])
% d+ U5 b9 M- Y0 l
% P$ H, v0 T' v2 j. ?0 a5 r# M; K$ n5 V2 |: S' C$ e( i; c! u
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。+ M, ]; O, T- _1 ~& V
5.提取了初始年份和初始人口数。& Z2 M/ i2 o9 k7 z8 U" P4 o

, x9 y3 }9 a! s3 K6 h: g) x" ]8 `- g3 t- }. _1 Y
6.定义 Logistic 模型函数:
* t- C; f  w8 j7 Q$ W' W9 v( N' n
   def x(t, r, xm):
, C5 y# ?, e" L& m5 G- A( T* H       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))# n/ I7 t( g9 [! c- ^6 b
5 Q3 k/ Z( |9 N2 M, i/ i; y

/ Y6 D; R& r5 V8 [! H2 @7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。& e' ~" R* |) p' r6 T" \$ a3 h

0 P* l% r' g: ]- v
+ ~' B" F% e6 U8.拟合参数:2 n& V, M( i4 D; g# |

1 ^& i7 m0 `9 s7 m, J5 ]   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
+ Q# G; v% @( ~   r, xm = popt[0], popt[1]5 {8 o' P. ^1 H! b6 y5 t

3 g+ H0 G8 a) y2 m% @  D1 O0 v: j6 O$ `' D6 i% D
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
; i5 y2 X" |3 n7 o! J6 M; W. v6 `5 S" f3 t- K. V
2 t; @" M; }: Q; ^- b
10.预测 1900 年人口:# |9 O  O% ]4 O2 H( g

" \5 n. c* r) h0 j9 B2 h, p" H   print('population in 1900 =', x(1900, r, xm))
, C$ d9 D0 B; z+ E2 D% s. q% L* \( D% T9 t# x

# O9 n2 c! ^) f11.使用拟合的参数预测了 1900 年的人口数。. d  i2 V6 G" {, `/ u

1 b6 R/ i! l+ e, k2 I
1 c" a7 e) d3 m$ c9 a: y12.绘制预测曲线:8 R1 v5 l. Z, h
& g8 p: a1 I5 i8 b
   year = np.linspace(1790, 2000, 21)! v* I) `+ v& f2 Z
   population = [x(each, r, xm) for each in year]
( P' U9 d( u; x' k* {   plt.scatter(df['year'], df['population'], label='actual')
. E* g3 ^+ B% {  u6 N   plt.plot(year, population, label='predict', color='coral')
- t) ]7 I/ A' m& r   plt.legend()
4 a: q* V- t$ l! x! p4 S# {( x* X/ q' K9 _

# O2 w6 C2 [( w; e1 k13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。$ o% Z1 D- _# P9 Z# @$ j. R
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
; r& r5 m, ^5 K" t. O
# i& ?) O5 b& w$ E  Q6 A$ R( q' n这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。" Y8 u7 x$ n" d! v

7 q4 Q+ q: Q( a, _
, e; G# C( j& R/ N

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-5-26 04:16 , Processed in 0.292414 second(s), 55 queries .

回顶部