QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1184

主题

4

听众

2916

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:/ y: ?6 N6 L0 L, V' w0 ]8 I, s
: c" Y" e, k) `
1.导入模块:* Y$ Z; h* j; a5 a- ?0 i( B

. f# b4 s! a/ o6 q/ M8 c   import numpy as np: G1 S+ }3 G5 |) f/ z
   import pandas as pd6 [' @; ?9 A7 o6 n
   from scipy.optimize import curve_fit
, U: A( T2 ^$ E+ x/ V1 L% B# t" F  e* z) k5 z3 W

' m2 x: Q9 w5 V/ A2 r0 ]+ [2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
( Z3 K8 w" \1 [0 x6 c8 i+ _& H) d! C- F$ e
5 R# Y) u2 {0 ]9 p* H1 C
3.准备数据:0 c' ?: X% j4 E' [" b

7 M: n6 {/ J! @& P5 v0 t. n   df = pd.DataFrame({$ ~! _3 x6 E( c9 z& @* V, x
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
6 S; ]" B: D' Q* i9 i       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
7 T3 Y' C  u  p5 u' J6 i   })2 [0 C. R7 w& ^+ i- g
   x0 = float(df['population'][0])
4 N! L) S, R, i   t0 = float(df['year'][0])
, f- Y4 \  i9 D, f2 j, P( L! r! q, R3 q% _
- D; E. x* w' [# {4 p) q; d" {' j4 v
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。3 ^' x* X$ l8 E2 F& U
5.提取了初始年份和初始人口数。$ P, Y3 s6 U2 i8 l7 j

7 W- {6 J4 @( ?
3 }3 ?- {" \( {1 ~/ w7 Q" X" {6.定义 Logistic 模型函数:
" M4 v/ M7 t) o' |
$ e# ?" y2 i: ~$ {   def x(t, r, xm):/ M# W7 e: `" p" M
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0))). I! J0 A! d( v6 }) p

4 D9 O6 c, E) A$ S% A2 ]
9 j5 G  @6 }7 D+ u' I& ?9 Q! u7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
3 d1 N+ Z4 V( Y. `3 G( N: d# [5 a1 L! [
; q! l$ g' t, A  W
" x% E" q/ [5 M) r$ w8.拟合参数:
" D. t/ x1 O$ }, B0 b& L2 j: x8 C: b1 m( D, |
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))) }& O( r3 }7 X9 B) i. Z  W
   r, xm = popt[0], popt[1]& N& D% u2 s) h) @- Q

: R0 T" x' {. o* k$ c3 Z& v. w
1 ], W3 R6 T) i9 Q6 C/ g9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。0 e3 h# Q- x7 G2 ?" [  [
0 _' P( @5 E* [' U5 y& q  c
: h2 I, b) C( O7 M" m
10.预测 1900 年人口:
. m  Y# c. r. D" I& o1 b* S
: R. W  }* A9 |6 @   print('population in 1900 =', x(1900, r, xm))
- M8 z/ ?2 g: n1 g. W4 Y
2 C4 y8 L1 r) w% f0 T2 O5 D& s) J2 G- ~+ R3 q( L
11.使用拟合的参数预测了 1900 年的人口数。
6 @! A) |8 _2 \+ K( O% O7 ^( y
  \7 O! z5 M7 V6 s& v
5 p! ]0 p7 q/ ~6 s( V12.绘制预测曲线:
9 a: g  `1 p/ C) @1 R" ^
: ]5 t% H7 q: R   year = np.linspace(1790, 2000, 21)& @, t# n* w3 A6 @6 u
   population = [x(each, r, xm) for each in year]
& N3 T& `# L& d1 l( Y# o   plt.scatter(df['year'], df['population'], label='actual')
" ^* N/ F/ H5 R4 d. P' |: h: w   plt.plot(year, population, label='predict', color='coral')
$ [" N7 _* s% Z6 i3 }   plt.legend()- P4 K' D& L# K/ x* W6 R9 g7 ^
4 Y: q% J) Z( n. u$ D$ t/ J) M4 [- \

# f: ]6 u" K; _4 X13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。! U8 z, t4 @. R% \' d/ K0 I9 P- h3 O
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。% X7 b9 v7 ~. e2 o/ |' s  d: a$ f

8 _  Y7 t! N/ }- |% i这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。* g( c. j. O( r0 f# v

( T3 H; y  Q- s- N# R! y- d+ H9 Z/ _7 d4 ~% _. K- J& l3 T) {: t

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, 2025-12-28 16:52 , Processed in 2.331857 second(s), 55 queries .

回顶部