QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
6 J! l& t4 R- a+ N1 S& r& Z1 o0 B% R# o5 Z- Y
1.导入模块:
; j2 [2 B+ z  q+ f" z0 J; Z, Z% B. }$ J1 _. u
   import numpy as np* w! C' J* I8 X0 O5 _
   import pandas as pd
2 Q  q1 q( i! D( U* D  ~8 q, X   from scipy.optimize import curve_fit! Y, p8 U% @7 h6 I) _9 z

! k3 Q7 ^# r7 p' [2 n! a3 k0 ]( ~* Q. R4 R4 Q; l/ [/ c! T- V8 X
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
% ~: j, G: s1 e5 k8 O7 ]' B1 ]0 H
$ W1 ?, \+ Z2 {/ h9 k
3.准备数据:
, p4 g5 M/ h& h/ X5 ?8 Q/ @7 N2 A0 r2 ]
   df = pd.DataFrame({  Q3 Z: r$ x* x" V  ?& C
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],
# e" t) U' y  q; I" }( M1 T0 i       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],. y. |0 A# d; o$ n% {
   })6 A6 t, E" i2 F4 b/ ^# g2 K
   x0 = float(df['population'][0])
0 K9 `& G8 c  C   t0 = float(df['year'][0])
6 W' ~1 ?3 {$ |
- }/ E+ ^& v; ~. h
( {" l1 i3 T: X) l. Y7 `4 K5 M4.创建了一个 Pandas DataFrame 来存储年份和人口数据。# O2 s4 i5 j+ F( _8 \
5.提取了初始年份和初始人口数。
; o! [9 t6 U( ?% c# \
! z  T% D; ]( E9 I# x+ ^5 S/ K
5 ^) n) G# \: E8 j6.定义 Logistic 模型函数:
, h# Y; [% G# e0 R9 F6 V* d& x3 |! i: H$ [7 C, ]
   def x(t, r, xm):
* {* s0 P) t3 D0 F3 g, v2 y       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
" O' W: V9 ]4 R- y1 p- z9 Q( H5 e# w' Z% X" ?5 F) ?) [$ B

4 Q+ f7 A7 b7 i2 w7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
6 Z! E  ~. \0 {3 i6 C+ b1 K3 W" S$ N0 Y# B

$ b. O7 ?0 C2 s8 \/ B8.拟合参数:
6 i6 g8 b( p( m. O# c% u
9 G9 Q3 w$ m. D3 P, M4 f" V8 X   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))! P+ G% i" p% c
   r, xm = popt[0], popt[1]
1 ]/ t9 d& G/ |  `- |+ C8 ~9 Z; e8 s# W$ O' s. j! W$ @

: C( n, [7 W8 p, U9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
. e$ A" s9 V3 v* N0 n( W
' V1 s# t) v% F* A3 x
& S/ u) y" M) i$ t) }+ O* {% B10.预测 1900 年人口:
" `( S9 [' N- c( e* N# E# X* i% U; h- ~2 o4 x& H
   print('population in 1900 =', x(1900, r, xm))
& ^) \  l/ Q5 M8 v
* Q# N7 g! u8 h8 `' g+ R) @) ]* d3 T& g9 {# L4 Y& I
11.使用拟合的参数预测了 1900 年的人口数。7 w- M/ h% D- L. h- u
) Z. C3 `1 U4 C/ P. h
, [- i5 e; n, {6 N
12.绘制预测曲线:6 X# L0 A1 P7 W0 A" X1 a  L
1 {% H2 C' p% i) N
   year = np.linspace(1790, 2000, 21)! P( I! k# w9 B
   population = [x(each, r, xm) for each in year]- @3 L2 |* Q+ j$ k
   plt.scatter(df['year'], df['population'], label='actual')
) p! L% C) ^$ P' }. a- j   plt.plot(year, population, label='predict', color='coral')% a) [( V+ e9 g
   plt.legend()( i) E* h" W" N

: d& J: W$ R5 L/ g1 Q+ B) O5 K, o5 y6 e
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
7 T" b. _7 A  M$ V14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
0 v4 W1 g' @$ e6 l( p6 p. N
! [' D4 Q+ t5 H- i5 a7 Q5 f这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
9 _# v, C0 }# }
2 R+ R1 _: R% t  r$ |# |# i6 o6 l0 e4 F' V+ Z: J3 O3 K

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 17:36 , Processed in 0.637489 second(s), 55 queries .

回顶部