QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
6 @0 Z3 ^: G  e! r' t6 A
5 @  X. P& m  M" c1.导入模块:
: t+ P) z$ \; X- P
; ]- C. l" A6 u+ H* f2 a) N8 t8 ?! Q   import numpy as np# ?5 D% R5 M! J3 m8 C
   import pandas as pd
9 Q( U7 z" j$ B+ ~' K   from scipy.optimize import curve_fit
. |0 R- k# T; T/ k. T. ~
9 \4 p( r$ D+ c. Y8 y- K- u6 |# [+ s% r/ S+ A6 o/ H9 g
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
1 _7 q: Z5 q8 @1 N; L8 F( l6 Z$ U: m4 t

+ V' Q- b% Z. \+ \9 L& n: ?3.准备数据:
. g# t+ f/ U* d% k7 b  B9 f% a8 k% `# F# p  j
   df = pd.DataFrame({& Q1 a6 |9 T* C2 @! m
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
9 ?: B- F2 `5 h/ q       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],6 N, r3 L, w* F4 n) c# n8 p
   })
9 S, B, b  o  u8 T+ `* \   x0 = float(df['population'][0])
6 f$ k# p7 g( }% b   t0 = float(df['year'][0])9 ?: d# W. l6 O4 H8 a- ^

5 ]$ D6 [  t9 @: B0 U; M/ p1 [: {) h  }1 H4 X5 Z- T( h
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。: V" o) K4 ^: q' S
5.提取了初始年份和初始人口数。
1 G4 M2 r) l1 f( ?3 A1 y& @
0 @  m: }9 O' h2 X( _) H% L! U4 E) |% j# W+ ~
6.定义 Logistic 模型函数:% @. [6 O$ h0 s% W: N

7 h% S. G$ `; c" V. Y( b3 G   def x(t, r, xm):
' {. r! H; k; t5 R' H- k4 p; [, w       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))1 T0 L* L- m0 |) e
0 S# p9 m, u  z3 v  D4 _" ~( n, E# J

) U8 V# P( b9 x8 S* P7 a$ _4 E7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。* i/ R' m& g: f/ x; z# u# V9 x/ X- ?) ~
+ U% v* a3 ]! s/ s" ~  ^, z5 v' n
, g7 o# B- c/ D% ?0 ~0 ~: i1 O
8.拟合参数:7 c: _  P9 [$ C0 ?2 }4 C) I5 @

) V2 k7 S5 M( i8 N# c( z" O   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
% i$ r, K7 R0 K* H, w3 V; x   r, xm = popt[0], popt[1]
* ?: b5 }; Z9 R+ S, }
) F9 r( A$ n! o2 g0 a7 a3 g
# a& R- M$ j6 z6 w' z3 m. M9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
3 p( O# {% r$ G$ f
# J1 W9 m: r' D9 b1 V; V
' S9 o( J7 S& J8 L, J10.预测 1900 年人口:
- @$ b+ L, l) {* g6 z+ k& }& V. @
: ?8 M" \: X) e$ x3 [   print('population in 1900 =', x(1900, r, xm))
  V0 Q$ Q5 ~7 _& O+ ^2 D$ P8 i$ }, r2 x9 X* _+ V$ O
/ ?8 \2 z( I5 C. \+ Y" a2 T
11.使用拟合的参数预测了 1900 年的人口数。2 T! k) u! X4 v  i  ~# C
, Z7 b) Y1 E8 w1 l
5 c* w% N' i1 e( \
12.绘制预测曲线:
" `+ y! C  U5 }: l# `2 v7 B/ V3 B* W2 b5 m7 m1 b0 V9 m
   year = np.linspace(1790, 2000, 21)
1 u' H, j. E( m6 f   population = [x(each, r, xm) for each in year]9 J3 P) O) c' E, G  @! q5 N
   plt.scatter(df['year'], df['population'], label='actual')" j; k/ l/ h8 X, L. p
   plt.plot(year, population, label='predict', color='coral')
, o1 [- J, U7 b' e) b, c' p   plt.legend()
0 y' S+ J2 H  z
: \3 s. W( o3 c! V: K  o& _" x' N6 w
' [" @' M; i3 o. ]" @, W* Y$ s; ?4 G13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
. [4 }' Z$ m) Q, D% g* k14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
: m% x' J7 y) J; j2 a, a
- `! C3 }6 s4 T0 [这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
0 w4 d4 {9 a' g4 D
1 K# E7 k1 P' L2 F  O) U
4 k/ _- y3 p6 h: i

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-6-21 03:55 , Processed in 0.801367 second(s), 55 queries .

回顶部