QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
; u; X+ i/ d6 P. I+ |# c% w
( ~# L, J' C* z0 u4 F1.导入模块:
3 g. H8 B+ O0 Y8 k) u+ l& M. o* J, @$ }8 J
   import numpy as np
# g' m& ^3 e' r: Z1 N; q   import pandas as pd
% V, Z, u; c+ m   from scipy.optimize import curve_fit# J$ }% t3 R2 q

, G) v- P5 Q4 @5 Z; k, U: V8 G9 t  ?2 D  E* \
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
: f' o, @! X3 t% P( H+ s* H/ ]4 E4 a  W! w" R# E- |

# c! t3 Z6 H1 U) Q  `3.准备数据:2 P4 Y  x! j* G! X/ t

; s7 A( p( M2 H8 v   df = pd.DataFrame({2 x. Y/ Y% [0 M' ~6 K$ L
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],# T) _* z. s) |6 _6 \, e. o
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],  ], x0 D: e3 G/ a' V" R4 T
   }). i9 p( @0 g, @* ?5 {4 _- a
   x0 = float(df['population'][0])9 [0 w, C) r7 ^7 b; s" l
   t0 = float(df['year'][0])
1 a8 f) @9 M. C+ q/ n
# [& r. U6 ]) S1 I8 o; z# b7 K$ j$ N& i* Y* z" a$ p6 K- }! ?& h
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
4 q7 b  I& e- a" G* s- X0 t5.提取了初始年份和初始人口数。
& Q0 D1 x+ |2 g. k0 l) I; a0 t8 B6 _" q# h* h6 Q! E) ]: S2 \! ^

% u- q1 ?! p, e: G5 K6.定义 Logistic 模型函数:! B6 H. n- y* P( I: f" y
3 N7 [; o. V8 M% g" D( p
   def x(t, r, xm):8 T6 w; y: ]8 u; N, n
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
, Y. c# L& ?* g  T9 p  a6 t! C: l7 b' d
5 Z* X$ g3 F  s6 d" g
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。
; _- F8 z2 i; m- O# c$ v6 \1 {  w! t6 I" v' X1 R
) f* M* R3 H: P3 m: J: T  c# s) N: f# I. ?
8.拟合参数:" R8 o  i( I& q- O6 E7 U

, ~6 u# z. R" T. ^+ |" q( k  U   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))/ ^1 t( T) L* {
   r, xm = popt[0], popt[1]% o; ^: e4 ]& J0 Q/ _3 e
3 f# D/ Y1 b. U% w. `

+ p+ H& [4 q8 s* B$ j! \  D  D4 x9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
* e5 ?2 R7 _" r! M& j1 w0 n1 U* I0 m3 R* N2 c/ ^1 R; k

7 G$ [' s; h5 A1 m10.预测 1900 年人口:; H5 ~# Y/ d6 o. R

' _2 a' F5 b( I: G" {/ ]+ G5 F   print('population in 1900 =', x(1900, r, xm))2 H# H8 s8 D4 C, ?3 W

* x' G- ~* T# T% h5 ~- v
8 I( e+ {% T3 ~: @7 b5 u# v7 E' I11.使用拟合的参数预测了 1900 年的人口数。$ g. H2 ]- g5 U0 g
7 @$ f( {; q; @; Q6 D9 R

; W3 q  m( N8 k7 C12.绘制预测曲线:
: H: }( f$ \; x$ m; Y# W8 u
4 Y9 M0 D) W8 H# b! x$ h   year = np.linspace(1790, 2000, 21)9 C! D' t/ X# f  Z. A
   population = [x(each, r, xm) for each in year]
, a) w4 q1 R) D/ N   plt.scatter(df['year'], df['population'], label='actual')5 \: A3 h' [. j! U% k
   plt.plot(year, population, label='predict', color='coral')
) L( ^  V7 {- z  f( Y   plt.legend()
1 m" N, q2 q% r# m& Q4 |3 i
' [- ^0 ^/ L6 L. }- E7 n  L! l. a" U5 Z' A- p8 a: c7 r( u
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
) g0 g" g; A9 j" [! q* S+ t. u" Q14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
0 t/ m0 a5 I& `8 p4 {# `' `; j/ l) V' F. ?. r
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
- M! h# f) h3 t! D: |6 }' K# c+ x7 K, g& z* M# \
! o# j; [9 q+ J& L# B

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 07:23 , Processed in 0.306249 second(s), 54 queries .

回顶部