QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |正序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:$ o9 `0 N8 F, g; M4 m

1 O7 L/ l! z$ @* y3 m1.导入模块:
" \1 V! H9 R! [* ]* q$ ~9 j; H1 U/ S% d7 |- O& O( I
   import numpy as np# A' h# k. B# }" t/ Y7 E2 _
   import pandas as pd
: w/ m- @/ ?  V. B4 b' X# o   from scipy.optimize import curve_fit+ k& d! \; d2 R! o; M! f

  t$ |' n$ {3 N# G4 d! e( d$ ]' T9 q! d  a
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
# ]4 G' _/ N/ h; o+ X& n) C& `2 m" }! x( C1 C0 M6 |! A

! S. Z9 c  c# e3 o) M2 j) N3.准备数据:# }8 t: ^2 r* P# l0 n# z. _
! b9 y7 }% U. p" _8 P7 P+ I; G
   df = pd.DataFrame({
0 b0 h, {. d# r       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
4 U% {3 e1 I" t8 h6 L$ X9 @       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
: ^1 x2 c. q1 o0 }9 E   })! a" |& y$ b( A$ b& d4 t7 S( C: v
   x0 = float(df['population'][0])% e5 e/ Y4 c1 m# V  U
   t0 = float(df['year'][0]); [6 P, ^( h: c8 s; Z2 Y- w' g& h6 n

  x8 G8 i+ s) l/ w
' R3 ]5 Q1 v6 G6 C  `4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
8 E* r8 }1 K9 P0 X3 n3 S$ ^7 c3 O5.提取了初始年份和初始人口数。, P% r5 ^/ E/ z$ O3 L6 }

5 I$ _3 C: t5 H& D; F! p1 A: _4 a4 F, w/ x( N" b
6.定义 Logistic 模型函数:
/ `% d0 D' ]# @, K7 K$ n! T
- G, M' |: u4 o1 d2 j/ ]   def x(t, r, xm):" C. [! A, F* _: C% B- b
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))5 e/ Q) Q- Q& G, q/ Q- z
' ]2 i- ^) l, q2 o( S1 D

, h# P! F7 ?6 y: ?& b: h7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
+ j* o& r5 ^% j$ ^. _; o/ a
+ O! ?" w3 I6 t' @# h- G4 D, u. ^% `. r
8.拟合参数:
3 Y: l8 v+ J! G% |  w+ \# T9 L
# e4 H! C& I' Y% Q   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))" t8 o3 v4 C% d* S
   r, xm = popt[0], popt[1]
6 j' f' Q. m# k( K# q1 f: S$ E# w1 Q4 O2 [/ ^
/ s' L+ I1 A0 h0 G$ [4 @, a
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
( X6 R/ Z6 }! m" T- K$ b# \" k2 d* B" O7 R% E% D. L
7 V! e: h$ `( a( i1 w3 T) H# z0 ~1 |3 N
10.预测 1900 年人口:0 w  @' q% T7 N/ A8 @! P  p/ h

7 F1 H- Q" M  ]! V) _( N# L   print('population in 1900 =', x(1900, r, xm))9 H! |$ {) Q3 g  D
2 H2 Z4 u* M- G. \; T( G$ p3 P+ X
5 h6 T% a. j0 v
11.使用拟合的参数预测了 1900 年的人口数。
  j0 V8 a3 f4 @4 n* e- p1 w
! ^4 o% q  y9 b1 x- ~7 L/ e
% ], _- s' A& M, A# r! X12.绘制预测曲线:3 m+ k+ X" q; |, q0 B- K7 [" O
: t' c3 T+ p, s7 B9 O  y0 J
   year = np.linspace(1790, 2000, 21). k' `9 E7 n" [" O0 }
   population = [x(each, r, xm) for each in year]
6 t2 _3 J3 t0 _1 K3 U8 ~4 @   plt.scatter(df['year'], df['population'], label='actual')5 ~0 P5 A: C/ F" P+ ^+ \
   plt.plot(year, population, label='predict', color='coral')+ H- P2 a6 t5 R
   plt.legend()) C) P" m$ {6 P9 c& `
5 g- _& D5 ]3 ?) M5 F2 t+ [# x0 h
  t' m2 _( {/ [4 k2 |
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。5 d% n, W% B- K6 s" P% `' \
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。2 p: ^+ b0 k0 }1 d( e
* ]' p% m/ _7 P. T. Z, v2 l3 y+ |
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
+ o3 `# r0 U/ d, a* F
4 M/ f" y% L3 ?5 n( Q
- Y" ^* e. m: o9 |6 k; c2 s

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-9-27 15:09 , Processed in 0.395420 second(s), 55 queries .

回顶部