QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:# N$ y5 H1 ^+ \) v5 M

2 y' o" z( C. R5 y1.导入模块:+ d7 ?. Z6 e# ^) s

: E0 U) n4 ^/ F; L; M; W   import numpy as np
! v7 G3 S2 _) N* @7 g   import pandas as pd
7 g+ y1 k. f0 p- j   from scipy.optimize import curve_fit( Y1 W! y8 o) Z9 X+ G$ h) U; I( n
$ d+ _, Z) I( t# R( [
  H# i5 i. i. H( z) w
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
* B! k' J' ~/ N+ [0 y
4 D; S$ ?6 ?" P
$ z# A9 P4 ~- c5 {3 t3.准备数据:
% o# i$ h. O6 G  K) |+ b* @, Q. N& M
   df = pd.DataFrame({
$ S3 q9 ^, D+ a* X, I       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],( I5 u: d* `+ t
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
2 c- h" ~( G% ]& k4 r3 J3 Z1 r; x  ?   })" P/ }! l; \4 K8 e' C, a4 A
   x0 = float(df['population'][0])
" y5 l* {$ q0 [, h: I* A- P- L   t0 = float(df['year'][0])
- m1 r9 u4 H2 i1 ~6 i
8 O% d9 Y9 e8 p. r+ w$ o) L7 Q8 Z, i5 l' `  h/ r. |+ o9 A
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
/ c8 Q: Z7 D, Q/ w' u+ Q! C5.提取了初始年份和初始人口数。
. m7 d8 T. H1 D0 q) k$ p1 U; A  k6 n+ a' q- u1 ~5 o

+ ]5 Z- u! G4 x1 @! f0 i6.定义 Logistic 模型函数:, [" L: N3 a  Q8 q; {3 ~

9 k- {! p* E& I. f! @, t$ L# J   def x(t, r, xm):
  V, E9 ^8 W# a9 X* }$ O1 L2 v       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0))). h0 P& i/ z7 D9 V" k! y
- J) L" n4 t* E9 T. D) d) _
6 ^9 V0 h. O8 Z, A
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。( j+ h$ T9 h  B

3 W+ ?* G) x( M9 N5 _/ e; a0 x' s/ m1 A: b; m7 `* w2 P( n1 t3 |
8.拟合参数:: j# ?! ]" j, ~  L
. z. s6 r0 F( z/ x9 v( w, g
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
) U$ H! [+ n) b4 v   r, xm = popt[0], popt[1]
6 L2 r1 Q) H+ w5 r4 x
# k& p. S0 r* e& e" n  z( c9 M' O  \, Z
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。9 J! L6 {- o" K2 ^( C6 M' z: v  a
, ~. B2 k, R1 _! ]; L
! X) L- A$ _$ v; e
10.预测 1900 年人口:
* h: x1 s. ^2 j7 w$ F, `# G' H0 Y* i1 H/ B" U
   print('population in 1900 =', x(1900, r, xm))
$ f" F) s+ |* c) k4 L& G5 J1 G) Y! |. c+ f* [' v3 ?& Y; x

0 D1 E" r) K5 p( ]) @/ b11.使用拟合的参数预测了 1900 年的人口数。5 X& J! Q! ?; q" ]  ?; `
4 t; e  U: {( v2 _/ P$ |

2 |7 Q1 q* ~+ ^' b12.绘制预测曲线:' H- R- \0 t# N/ [+ d; J4 `
4 s& F0 v  i( a% d
   year = np.linspace(1790, 2000, 21)
% s  W/ ?6 p* P: F  v! [   population = [x(each, r, xm) for each in year]% @( n8 _8 n/ c: ^
   plt.scatter(df['year'], df['population'], label='actual')
1 a: v& b# @( X1 x8 r   plt.plot(year, population, label='predict', color='coral')
( w- b  ~0 W" H. i9 u   plt.legend()
3 U+ q6 U  Q; C0 n9 C4 X! I/ B2 W, Z7 v. k7 c
5 l$ w( ]: U) Y8 d4 ?, E
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
3 g1 v" C0 O# P$ I: K$ B2 v14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
/ c' ?" V. l9 l$ R, h8 _7 T. v" I1 E2 Z2 S9 s  ^# R' r# I
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。1 @, S3 p0 J( F3 ?# I! R/ f7 r
% q6 u6 Z5 s, _5 S4 W

5 N+ N/ q' A: m7 ~# h

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-10 11:42 , Processed in 0.428463 second(s), 55 queries .

回顶部