QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
0 T6 p6 _& o+ l9 s
, j+ |2 [& a4 Z* D2 |( g4 _8 l1.导入模块:# |* e! a% l9 S

/ P$ T4 {4 l2 w0 M) ~# D* w5 D! w1 o   import numpy as np0 T% ^. p' F( c1 d) L
   import pandas as pd
& B+ U5 h* z4 p   from scipy.optimize import curve_fit% v; X# ~' R) j+ D3 J. p

6 [/ T& g! w( O7 H- O8 u7 U; P
* V* F: H1 d, K+ H2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
/ G: i, S; _# c' w0 \- q6 X
0 b$ I  ?  w9 w: Y5 J% ?
; V. c8 x- I3 Q0 q9 t; V% W0 E3.准备数据:
4 @) ?7 ^" S, N# k* t& b( h
3 l, v+ U4 d% [5 ^   df = pd.DataFrame({
9 q5 e( _7 \# ?# }# o# ?       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
9 o7 h) B$ x8 @       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
# g& o& S! j% g7 V8 }   })
' H, ~7 q8 `  j; x: G   x0 = float(df['population'][0])3 I% p! |3 Q4 Z) O0 k$ B' t
   t0 = float(df['year'][0])1 ^! X* f) }, u: w$ U

, H# {& {; a& f$ k
; F+ b, i) N6 C1 i2 j4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
5 c* q% B. a* f5 b" d5.提取了初始年份和初始人口数。
: Y+ ?5 o) |7 d1 D/ Y6 l$ s$ B' _+ [) N$ @/ s5 X# i& {* M: L

& B' ^. o. o# Z5 o6.定义 Logistic 模型函数:% [% y8 W4 L. R- {, p
& S& [. `( g$ {2 `# h
   def x(t, r, xm):
* ?9 n' H- N" j       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))& n+ [: z- @3 g# r4 s# @3 t

8 R* O: ?+ L( l0 G5 x0 ^2 n* p. K& k# |4 M9 U, q3 H- J% V0 N, _
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。% \& _/ _2 {" @2 g& c
/ B9 k* z9 f. k7 w
# \! q, R9 V% S! i0 D1 E. L* I4 B
8.拟合参数:
& \$ A' }/ P/ p' @8 M% S" l3 \% @  ~  u+ M! o8 L
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf))); d( ]( S9 T% J9 Q! r3 d
   r, xm = popt[0], popt[1]" f+ [1 `8 g2 F. a9 I* X) A
& a/ o: h3 T5 }. q# w

* Y) |4 Z. d6 a- Y! N9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
, }3 p- ]9 }) e, T4 j$ `0 U2 R0 y; W! d! F, T' k

! w2 D1 O: I$ _% z* R& H10.预测 1900 年人口:
1 p  g* @  i. @$ K0 v% h2 J6 _
9 l  o9 B* ]# S   print('population in 1900 =', x(1900, r, xm))
% `( e2 o9 y/ m% z6 l# K; q" g
2 C/ M) g8 R. i* _: w7 H
* p1 w" s5 z& F/ o# J- x& o11.使用拟合的参数预测了 1900 年的人口数。; K7 @! b$ g  m( `- g4 J

0 X! \( r; B' [5 _& d* v; l" z/ L
: k/ S8 u7 F; D' H3 y! U12.绘制预测曲线:
: Q: i7 i* e$ x. @. ~  k* [& A  v/ D% _' {
   year = np.linspace(1790, 2000, 21)$ U/ L3 L& g: w3 ?
   population = [x(each, r, xm) for each in year]# V" m/ T. k  w4 @# D
   plt.scatter(df['year'], df['population'], label='actual')
9 |+ U0 S5 }) N+ K4 U0 K8 A1 O   plt.plot(year, population, label='predict', color='coral')
% B( b5 A; h) Z/ y! u+ l   plt.legend()
! T9 m3 d/ C% a6 b+ s& B; Z3 G2 q2 t& y! t' R

- }8 R4 u; s2 Q2 m2 K( v! c13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
) {3 V: J# |5 X1 S' l14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。; c4 ]1 I$ ?; w' `: L- X
# v( S8 f% c5 M3 G) D) Q- m5 v
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
, [6 u" K  Z% i& M, c* j) }) V
7 o) u- r) m5 j2 ^) }, G0 w: R/ ]6 b9 J) G$ M: Z

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-9 06:06 , Processed in 0.461256 second(s), 55 queries .

回顶部