QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:! r3 t! M- p; F
( v* g% {2 z" |  {
1.导入模块:
& Q) V$ i3 k1 ]( ], M! i! u
1 I" m) U; J  o5 [: a: Y   import numpy as np: j) j) L! N+ \& z$ [- F/ m
   import pandas as pd8 T, |- k0 g( v' K
   from scipy.optimize import curve_fit, j4 E) [- D* C$ E( S
8 n% Y' P! Q, U! V) u/ G7 x

# r, X1 P  A! w$ `2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。" D  w' I8 F3 G! D( l
& @6 B2 n1 D) J( G  D
% A$ I/ Z2 e7 D8 s# D0 a( T# j
3.准备数据:% y& d2 }, A0 ?
9 e2 ]! M8 e3 t) K1 L+ L
   df = pd.DataFrame({
# K4 h) k$ g$ I3 n7 [       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
2 m7 L; {! q: q       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],2 k( h% P4 G4 k1 k
   })
$ I3 ^3 f$ M/ @% L! B   x0 = float(df['population'][0])2 o4 W# P- C% X2 G2 R
   t0 = float(df['year'][0])
2 v3 l# g7 ~3 b6 T+ s# L  u( D2 o- d) l
; g1 h7 P( `5 F/ p$ D
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
- A# a" j5 v, ?( D6 k2 b4 t* f- v) \5.提取了初始年份和初始人口数。( d$ q( X- m( I0 |, {
) _$ ~4 x3 ]3 w/ Z% _$ L/ J6 E6 C
8 l" c1 a6 f0 B  ^, @
6.定义 Logistic 模型函数:
0 b- Y( \3 X3 E6 ^: T
/ T2 B/ T* ^4 T- F8 d   def x(t, r, xm):. Y* g/ a- U, e  n1 l. i/ Z& g# F* ~
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
% i/ A2 v  Y2 G7 G; d
; L( F+ m- e. b1 ~0 n5 D# c" O' X6 n( {0 e7 {8 a5 n1 p" O
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
, h- u: x6 T; B) Z
. N0 e& j$ v1 E( A/ }7 d. b$ f+ G4 B1 H- z
8.拟合参数:
- p# Q4 x& F4 p2 t  N( y$ \
( F4 a. S! U& C( M* q5 S$ O   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))# ]. ]6 P' x1 _8 k3 n7 J( ?
   r, xm = popt[0], popt[1]3 g. Q4 |: u; u3 C7 j
7 r' |7 c' n: Y$ I& `# E  q1 B$ z

; v- r3 B- r( [% Q3 k3 r9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
7 j4 s0 N1 H7 p" a5 ]0 F& t/ Z, d) h* Z' ]) Q  l) n" M) o

' q# {3 N. H- t10.预测 1900 年人口:
9 O- r# ]* N  B& E2 i) P6 e9 o. b, O) X: o  K4 K
   print('population in 1900 =', x(1900, r, xm))
8 T' I  P* [- g7 Y0 c
6 `" _# \7 Q- f
5 e$ l" e& j# M* ]. R11.使用拟合的参数预测了 1900 年的人口数。' t% }* H+ U9 z5 `3 L; Z8 p! i! C
9 P. o/ s' s, m: I

+ S' q0 k2 i* S+ U$ i& G12.绘制预测曲线:
- {  }) y0 n2 m/ {" N4 ?- L8 r5 F  Z
- S; I- H$ m0 B   year = np.linspace(1790, 2000, 21)
3 [2 g8 t" R, q+ f1 j- R   population = [x(each, r, xm) for each in year]1 ]' T$ [0 b+ B$ }
   plt.scatter(df['year'], df['population'], label='actual')5 O! v/ H2 b) Q$ E  V+ W& r) O
   plt.plot(year, population, label='predict', color='coral')6 k6 u: t) a' L+ p& f; w* M
   plt.legend()) `9 U) V( c4 Q# {

: i6 O6 X, p0 P+ E
- w; T1 c7 G+ {2 Z13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。! `0 t- q8 |  r
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
2 G6 i3 c0 x  H' o% [0 v$ \, b: o8 @; V3 b; F) q5 X* T. d* H8 r; _
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。( _+ A7 @# z# v0 Z+ W0 o
& n# O% K; y, q+ q6 j& A, O
2 ^8 i4 C5 r" a0 J2 f% y, a

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 05:39 , Processed in 0.968445 second(s), 55 queries .

回顶部