QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1198

主题

4

听众

2978

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:" i% S3 G* q8 m  K0 m3 d# R/ T

) `3 \2 }9 V2 e' ^1 N+ r/ C1.导入模块:4 V0 w- `% ^  [) r& i

* ]5 i$ |5 a& L4 t: }: D   import numpy as np
# u1 I: M" B. K* U7 k" Q* n   import pandas as pd2 b/ I( R, i, c$ M
   from scipy.optimize import curve_fit2 _; b1 x- m2 G0 o& P

* x% J/ C* B9 W7 q2 t; h. P& A4 w$ Q5 t* J8 F7 @5 T
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
5 G# j# Y9 }' Y% [. J' z4 T1 N0 h" c5 g! O& A7 o. \5 \! B
6 H  p6 l/ ^: i4 c* _- O8 d
3.准备数据:& \0 }8 `! J( [6 P
/ H  h1 X' ^( o- b. E+ h
   df = pd.DataFrame({
6 @$ ]" L& O/ c( F       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],: ?: Q# B5 `% {/ E& v
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],2 V$ d1 _9 U: m" B) c1 m6 S
   })* w/ E) t/ T2 c7 p4 Q; w* q% h
   x0 = float(df['population'][0])
  R' h* g+ S% N$ ]4 z   t0 = float(df['year'][0]), Z; q2 e# \. j) H# r) g1 _8 R5 H
% v$ M5 ~% B* X0 ]
$ n2 N0 c6 ~0 A9 `: a
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
" N+ F( v  g$ c( o: r) w) P9 E& S7 M5.提取了初始年份和初始人口数。6 c1 ~- a4 m3 G

" f2 k+ ^' X+ R! M
3 U7 v: d4 D; B5 v/ E! N6.定义 Logistic 模型函数:6 U) b6 U& N1 I6 b, `  |
1 v7 K! J  o& Q( D* a1 Z. h
   def x(t, r, xm):
: j/ ^2 G* u1 H       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))5 x# H; h6 Z* ^  u5 J
1 M- f& F8 I0 i7 O

9 E* P, V& @! P, d7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
* ]0 \, \: M' Q
1 ]9 N$ m7 G$ Z* X2 Y4 i
0 @. E# i1 j( S7 G2 Q8.拟合参数:# A8 B( a8 D. t1 N9 m

7 |8 H6 ~2 P4 Y3 U& ^  @' s   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
3 d" I0 G1 {& r   r, xm = popt[0], popt[1]
: ]( C8 ]# H: K, t& M9 u
) s# f- s$ I; y$ r6 I
& L0 B$ [; h9 N( j3 ?: H- e8 y. C! Z9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。, ?% p; J3 L0 L4 V1 [
- t% J3 G* F( n+ N( Z, X

6 E& m$ c9 i! g% _; J+ n10.预测 1900 年人口:
8 f' K3 ~1 }" k  g3 a+ f+ Y, |  h, q5 O) I
   print('population in 1900 =', x(1900, r, xm))
. Z$ b* x2 w( _9 _; z
: F( ^( y( `7 m% @! F8 u5 c
- i) t1 P. B$ g6 T5 V3 z1 a11.使用拟合的参数预测了 1900 年的人口数。
- e5 u9 o& P  L( E; \4 t& A' k: I2 q" P" y( b
* a7 j/ |% E; Z! _/ m
12.绘制预测曲线:* ?& M7 s) y: _+ G/ P3 a; B
0 _$ f0 K  [- k3 b
   year = np.linspace(1790, 2000, 21)
$ m. l( b; ^9 {   population = [x(each, r, xm) for each in year]5 B  k0 n) @' _+ Q/ i+ m
   plt.scatter(df['year'], df['population'], label='actual')$ \9 d1 ?; C0 V! p
   plt.plot(year, population, label='predict', color='coral')
  w+ E8 {* K+ c   plt.legend()
3 n. L* G8 n+ w6 ]& x1 E# ~" c4 @, Y. b' c6 O0 u5 S
) _% k7 B1 N- h  }
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
& E  J8 [% r! J* ]9 q- b3 y14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
3 E2 _; r( G1 e
# X2 Y1 ?2 B" y; H; ]这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
6 M# ~1 u& p+ V/ M( R5 Q
1 O8 _2 u; D  K. ^' B
* A' S; P! h9 A( ~% }, c9 O$ {

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-10-14 07:01 , Processed in 0.483469 second(s), 55 queries .

回顶部