QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
. c. u& s; B1 |( L
! c( ^5 O7 {& |. U; {1.导入模块:( Z5 P  j5 z. e! ^: `
% ]4 N. T5 K, x3 i9 U
   import numpy as np+ k6 n# c# w* Z8 k% m- Y
   import pandas as pd
  ]2 w+ P- h' P. P3 ]   from scipy.optimize import curve_fit: e1 ~; }" A7 F0 a: u3 l3 Q# x
1 Y& Y3 c, m$ l4 U; J' S
2 s1 @" g( d' o
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
& V1 `2 U$ M2 M) r8 F$ w. W
  V) _) C, g7 K9 ~# `$ V# Y
5 i1 z# g( F  P6 |. @+ H- l. a# l3.准备数据:
, j. x3 s' \4 a$ F) P+ B& j, Q/ Y1 ?, r6 v+ [" k8 m+ R1 Q% B
   df = pd.DataFrame({
; z+ D8 W! m# z3 u5 c       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],8 @- g- x0 b2 I- Y* L$ u
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
% {; ~! g+ E! r6 Z   })
% o9 [1 @8 \& U- ?* h( a: U   x0 = float(df['population'][0])
: _$ N( l6 S) R7 p8 D9 q8 D) @' P   t0 = float(df['year'][0])
+ L* b& p+ C7 F* w$ l' ~* M7 m3 J( R
" ?2 z: O! \5 f, b
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
& o: _8 A# T% C+ o( b4 u) S. y5.提取了初始年份和初始人口数。) F$ ~  C- u1 s6 W

3 d2 O2 J* O9 q2 s. G
+ r6 l; B& n, x! p6.定义 Logistic 模型函数:
$ z1 c6 J. J+ `6 Y, ~: ^* j+ ?8 H6 J
   def x(t, r, xm):; a1 w# C. }4 M, m
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))1 @4 w' G6 v5 v
$ i( d4 q& \" H! t1 S  V) n0 P: l1 p
" A9 \& N  V6 B# r
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
4 a+ V# P; h: p1 F: ^9 J8 Y* ?4 k# b0 B

: D$ @/ y, P, D+ }6 @6 K) K8.拟合参数:( y# D7 _; `  {

8 z# Z- h* @) y4 U7 C# D( C* \* @   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
* F9 K$ y$ L8 o. r   r, xm = popt[0], popt[1]+ P  [3 ~- T. m( S5 o% w4 h$ F  i

2 u" L3 b  w- r. y1 i/ t1 m! J8 B% u2 p; M" d
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。! R5 w6 a* ?3 J' A6 C4 e
* \% r! U7 D4 W

% b8 h* P4 z6 {- ?. R, Q10.预测 1900 年人口:$ L4 g5 y$ B1 J- q* m; [* M( O
6 K) T$ G- u% l, y/ H6 q: I  I: X) `
   print('population in 1900 =', x(1900, r, xm))& H$ D6 i% |4 l$ l2 K( u2 {
. T1 \! n: e5 M$ v3 S( F

5 T! Y' v. W; ~) G1 G9 A11.使用拟合的参数预测了 1900 年的人口数。: e9 H& Y: i, g, E5 [6 o( R

# F6 R& i" f  y( H. v" `+ L0 v9 {4 i$ M; C; {
12.绘制预测曲线:
9 k. T3 q- L" e) o& k5 [+ _/ e7 a9 A! S9 i2 j# L7 T0 J
   year = np.linspace(1790, 2000, 21)2 U. V" [$ a4 i+ Y2 {1 W6 z
   population = [x(each, r, xm) for each in year]
/ i' ?6 V7 H' I: q   plt.scatter(df['year'], df['population'], label='actual')+ x" U" I  d) s6 N
   plt.plot(year, population, label='predict', color='coral')
' n7 Q5 H! J+ F   plt.legend()$ x! e* x- q5 g& G3 D7 q) c

2 S! V9 \3 F3 X7 h  G: c
/ Q- B$ J( [5 Y6 O8 @* x13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。+ d2 G( `/ J4 i4 A
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
1 }. |- o4 Y& @
7 o' {: ?4 p% {% D这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
( x! t# ~0 S+ K# @# p+ H- Y5 g4 }/ j
* ~" ^0 q8 A8 l

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 02:12 , Processed in 3.536451 second(s), 55 queries .

回顶部