QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:- \7 m$ }7 ^3 [
! y+ k  {& m8 ?) C# e' Z' Z/ Z1 J4 N3 W% l
1.导入模块:
. {0 A4 K# _& r, O* I2 |6 z
. ?2 C# y& k7 p  l! A/ a/ `4 |   import numpy as np
, _. T2 }# j+ g$ e, f$ d   import pandas as pd
5 ?% r6 m( i6 a, c( J   from scipy.optimize import curve_fit
- @! N9 y5 R# @
7 X5 q+ e; s" ]4 ^- ^# ^/ ]" w: H+ u% ^' {4 T2 }
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。
) P( d" W2 D* I; k+ q8 d, \; @7 p- C2 W; b

) M' g6 L. I4 i8 {4 h3.准备数据:% y3 C  v7 W+ W1 H( h1 Y2 v( o

2 F9 g0 z1 C: I9 C   df = pd.DataFrame({* ?5 V  N! k1 z  L$ b
       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],4 g# I7 H$ X6 S. T6 i2 g
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],: x/ A- Q8 r" z1 R1 @7 c) F
   })
) @8 }4 B* _8 o% q/ c- i   x0 = float(df['population'][0])
4 i. k$ j; [+ D7 t   t0 = float(df['year'][0])
/ V  C5 N4 L2 j+ F) h
2 U& ~- Q/ [; \8 ~3 q' r( l$ _2 K; L3 \" `- B) `
4.创建了一个 Pandas DataFrame 来存储年份和人口数据。. H2 A  l& Q& B2 l; y
5.提取了初始年份和初始人口数。
. w1 k, ]: a: V+ {
% O  k8 F, U" l" {, @
8 t; [' J. K; ^6 R* u2 ~6.定义 Logistic 模型函数:6 f% o' B1 x% X* x* N- J

$ Y: f# n% h0 s+ r. t   def x(t, r, xm):- l  {4 [! f3 l  q3 {( C
       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))- M. m+ c3 @5 Y5 p+ o+ m7 S8 D! k
0 H$ x, b5 j* \) n; j5 X
4 O& v* n6 P  k
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。) p) D3 N5 v4 A- _3 D+ p
( L7 y0 l# A) ~9 H- d2 V' B1 k) r
6 @; R2 |) ]# I5 `
8.拟合参数:
# C  j9 l. T& m! l
! p6 T* m- P) Y# M   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))5 a) P2 w- k( Q2 @, V1 l
   r, xm = popt[0], popt[1]
+ R1 b+ {& Y4 d, f- |! y  u
) V' h: @. y! W
* V: W' i7 R' ^+ n% v, K# w5 b9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。# Y* j  I# F) T0 W" M8 }
3 O& N0 |7 j5 A7 L8 M

. P+ v. {9 C! q+ }4 c1 N3 l, ?10.预测 1900 年人口:
. T" `3 D6 ]+ @* \  `6 g$ f& c  p, I
   print('population in 1900 =', x(1900, r, xm))0 J4 M& s+ \* C4 X

$ Z7 \( I; |- a7 O+ m6 }: H  ]+ G5 N: P3 m" b
11.使用拟合的参数预测了 1900 年的人口数。8 v- d# P9 }; k

  b8 }+ z  X8 L) }) W$ ?
5 U( W1 k) p7 N: P12.绘制预测曲线:
$ C' w& @' {2 j: c# y5 L2 i+ X* X4 _
   year = np.linspace(1790, 2000, 21)" x/ G! s" z% r1 l/ c8 ^
   population = [x(each, r, xm) for each in year]
* M* i% h7 o1 {& q$ a* R6 F   plt.scatter(df['year'], df['population'], label='actual')
# Y1 w( M9 B) z( j' Y   plt.plot(year, population, label='predict', color='coral')- F" h& X- H* ?5 s( W1 i: O
   plt.legend()% G2 f8 s( u  i5 [0 h0 Z+ P7 g

  D3 S1 Q+ H8 Y
+ o+ v5 O# Q# u$ V- `) N2 g5 w$ g13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。$ F4 W- d& Y6 [" P* Z, V
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
/ o, U4 e+ B/ v! u* K2 l5 D4 p9 x) }5 h5 N' t( I" @
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。! _( Z" O  s5 F1 A* k9 `2 \
( g9 D- e; H' l" C/ l  V& i
. E2 v4 ?; A! a/ t- R

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-7-10 08:01 , Processed in 0.388551 second(s), 55 queries .

回顶部