QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:* ?  k: Q6 f3 U) U4 D8 c; c$ `

2 t6 N2 [8 E2 f3 _1.导入模块:
9 l  k1 R, I9 I  a1 Q9 p2 r/ z& p2 c
   import numpy as np8 W6 P. G! @9 m  v- Y7 {
   import pandas as pd3 t/ s' a+ d! O5 k* a& ~
   from scipy.optimize import curve_fit! `+ P0 }) B7 l6 v
" U+ A- Y$ ~- M) e. a% ?* C

. T. p0 g2 J5 f# h  L2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。7 c( s, d/ @+ I% K+ N4 @% L$ k& y
5 V, j. [" E% Z5 s
- T# L1 j! x; j1 b: i! m
3.准备数据:
' F' q/ Q4 g- d' Z( U; j" ^- S
6 G' t7 [; o2 |+ F6 n   df = pd.DataFrame({
9 v$ U& F6 e+ r; _       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
2 K' m9 }' j8 C  f% F       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
3 e( s& F, @& R   })% `1 z3 O% V: ?
   x0 = float(df['population'][0])9 s# F8 P7 y( [9 w$ L7 _
   t0 = float(df['year'][0])# R+ b) m- g+ i7 v2 K7 d4 ]  j

1 S" w3 l) n& ~* H: j9 d9 w
% y, Y/ l8 ?4 i) P4.创建了一个 Pandas DataFrame 来存储年份和人口数据。' @3 R, I: T5 o; S, y' V6 ?- Y. D
5.提取了初始年份和初始人口数。
) U) `5 A, q6 {2 N6 [5 d! O6 W; X
( Z+ i% r+ F( {4 y' |
6 g6 {; k2 P1 e9 y4 s6 c! b0 K4 L6.定义 Logistic 模型函数:
% P/ s( S" \/ K6 t$ \
, H0 |- g+ p9 G5 _' a; G- @! W; h   def x(t, r, xm):% j; K5 [5 \  H6 R( n# I
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))# M% D' t$ G% I
' n* M2 ~4 l& U9 a  n
+ p" Y5 J* l6 k
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。, k% N- E; Q! F. \
& \: R$ b! P7 F/ `4 S
4 J( m- r, _; ]) O+ w
8.拟合参数:6 V5 `& e) b0 m/ d$ y

; H3 ?' z- B6 w) g8 Q9 p   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
+ ?$ M5 V3 Q$ N   r, xm = popt[0], popt[1]
( B, o# {3 ~6 l. k8 G; e
$ }1 @' q% l8 L* K9 O; Q) I0 D$ A3 W) m$ i2 P
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。3 G/ ^0 o+ o# y' H- @0 M

6 L8 o% x% s; |3 S7 c3 S! n6 t8 t& z4 Z& _: U" x) n; J
10.预测 1900 年人口:
: h  _2 D# v( k6 y
0 z3 x$ a* M" _2 j   print('population in 1900 =', x(1900, r, xm))( g5 l3 G( N0 o$ ^% W1 ~. \0 _: h

1 C: Z! j' P; i: x, b6 T& V: `
" ]- W" T, t0 o: A3 l, g6 z11.使用拟合的参数预测了 1900 年的人口数。$ P- ~+ w; E" x$ F; [
2 }7 l3 g3 G4 \. L
  W! l. A7 N) Q: Z4 r0 A% e6 K
12.绘制预测曲线:
0 I- O) ]8 W- h& l$ D& F4 R% B: b1 ^, m% l6 S
   year = np.linspace(1790, 2000, 21)* f* x, a  \; R' c/ n
   population = [x(each, r, xm) for each in year]
' a5 z& \  ]' L" S, H; P   plt.scatter(df['year'], df['population'], label='actual')
( L' }3 t3 P3 `. ^   plt.plot(year, population, label='predict', color='coral'): {$ L; i. e4 `. N
   plt.legend()5 b3 ^4 Y: F% ?% J) x) A% m) E% T3 n& I
( e& Y7 o, f1 k3 c4 M- {
: B  i4 k6 V' U9 S: ~
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
" n) |' g9 C4 @/ P5 H14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。& ]- Z/ D7 F' t9 x

' Z0 P# F7 `% T. d9 I( n/ \! z  p这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。4 H" s" X$ E: U$ S8 ?% w0 b/ {

, J/ J5 Z4 _, X( g' q$ M( H
" b8 I9 I! ]( k& L7 Q

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-4-12 06:06 , Processed in 0.596586 second(s), 54 queries .

回顶部