QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:4 G2 O* C% p/ K  u! h2 F+ U  b. z! G
6 J7 r2 Z( D! w7 w# G: w
1.导入模块:
4 d. ^7 @3 M6 C5 b. x& l2 N$ c! a
   import numpy as np* u: |0 x) y2 m/ T0 g. N" f/ }
   import pandas as pd" d6 p- C" b+ }, r7 t, F0 t' m
   from scipy.optimize import curve_fit
3 z% a$ _' J' P, K/ [+ P3 |9 R. \$ ~* R. Q

( W5 J. z) p( Z2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。+ c9 G4 W. e/ }- A7 O* o9 |
# Y# x  O8 V; s* B' S8 _& R/ b

' K! L6 q7 m+ E/ f3 \  ?" u3.准备数据:5 |$ s1 L( _! v7 f

# t" y2 ]0 E& a4 N; m7 E   df = pd.DataFrame({
: t7 p$ Q( c1 c/ ]       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],* f/ c, [, z9 V1 _
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
  H  A) w% V: L# z4 U, W   })
; T, q! C5 B# I: M- w0 @   x0 = float(df['population'][0])8 n; Y" M$ `$ E# @" o+ q/ T" A. C' Y
   t0 = float(df['year'][0])2 H1 @- p5 d# y8 j7 ^. U

! v  a6 L) M- f% _8 X1 E
5 _4 E$ l9 m0 v7 @) o4.创建了一个 Pandas DataFrame 来存储年份和人口数据。6 C, o5 m( E4 R$ n6 [6 H
5.提取了初始年份和初始人口数。
3 q4 j% f# ^5 i, [( ?  v! u! M' o& P9 W, o) B( \& S
4 u( U$ ]; K+ C* A# l
6.定义 Logistic 模型函数:; o7 t5 b9 v! ^
0 B0 V: `) u) V. j2 E
   def x(t, r, xm):
4 v6 w$ u' u& i+ a2 J       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))0 S' ]/ |. B+ }  g/ `" S

& J7 ^# Y7 L2 n0 ?
3 f1 ~2 X1 e2 t. d7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。9 D. i  t: z8 h2 r5 S

  P7 X2 H2 y, d  s! W" f7 d0 k  F: h% B
8.拟合参数:
0 B. H; J" Y+ n* H5 I4 [
! P( l, {) ?2 _9 ]+ d4 E   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
' ?6 x6 t$ j/ D/ J. H  g0 L   r, xm = popt[0], popt[1]
& O' ^, {2 a0 r  D4 C3 ~, M7 n
4 l0 p( O- C/ o# z2 {/ q* U
# f, X) E" m6 T  E9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
2 B% M  ~# f- f9 ]+ X: g1 G5 {9 n9 y2 m% L3 k( d* m0 O# y

/ ?1 c% }) _6 J" b" R' ~1 D10.预测 1900 年人口:& C* K( n5 H5 H

( u2 C: W2 ?3 |% E: q* v7 e   print('population in 1900 =', x(1900, r, xm))) h0 n0 Y  f: v2 t

- \$ ]: \+ I8 o/ |, y5 g
6 ]" t2 `0 \/ H% y1 t11.使用拟合的参数预测了 1900 年的人口数。2 C$ E, b! ?4 |# O9 r5 h/ a  g2 M

8 ^! o  H# X+ N& B) V* X
; }0 {. [5 o  U9 I9 v8 W2 ?! b& R12.绘制预测曲线:
  _. a& o( `4 |( R! g% D/ x. E! @9 r
   year = np.linspace(1790, 2000, 21)% Z0 \7 {; `+ |. s. F! e( j% B
   population = [x(each, r, xm) for each in year]
2 P+ i; m. A; r  _& b! M+ m   plt.scatter(df['year'], df['population'], label='actual')
, Y/ d$ p4 Q  r( q0 r   plt.plot(year, population, label='predict', color='coral')
; z+ g. d, {/ c* q/ w   plt.legend()
' g6 S" h, o6 U0 V$ b5 s: _
  H3 o1 l: @6 D3 o! X: N( B1 L/ J; E3 u/ O7 B  p  V' A1 ]
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。; R0 o7 r* A& a4 N2 R% {0 y
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。4 n' I5 l5 S! \& l- f; V  p
( O- E& b* c  Q# D
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。% A0 W! `$ g9 E7 A

* A" a  X. s6 @! q
( [6 x! a9 o) O6 P8 \( `4 x

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 14:44 , Processed in 0.592777 second(s), 55 queries .

回顶部