QQ登录

只需要一步,快速开始

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

使用 Logistic 模型拟合人口数据

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
5 M# g; v, m' b5 E8 m! I1 i9 C/ ~& c. v0 s% d! Y; ~" f' [
1.导入模块:$ Q% C$ @7 l- W0 {6 v5 E2 v

2 N! ~: t' t7 C0 F  l1 l   import numpy as np& I+ J' ?, X* g; W) G2 o0 P
   import pandas as pd* D9 `* s: T5 v7 E8 i, W$ X9 x/ h
   from scipy.optimize import curve_fit2 M9 @# F8 K2 C. e8 u5 h& b
$ z1 a( Q) ?! e% @4 S. ]
  b; Q* x5 d/ Y5 ^  D" u
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。( s' Z+ z9 Z6 n2 k" l* s1 [
0 X  G3 G, V9 `! {
+ w0 Q8 s& w, [! \+ P# ?
3.准备数据:" l+ W+ }3 c. a8 Q

+ D% S' J  L2 [, b. N   df = pd.DataFrame({
* Y1 P  h9 [& ~! X       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],0 l2 D- E3 L) `& X- ]& V
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
$ P- Z  X9 y0 w# G5 W3 u; `& a   })$ H. o- P+ i) m
   x0 = float(df['population'][0])5 B& a0 S: K' u) B# n( M
   t0 = float(df['year'][0])
" ~! ~: y) \0 x/ X( G  D! a+ l: `! [/ u3 M! S: X' t

9 X& r$ m% `/ B4.创建了一个 Pandas DataFrame 来存储年份和人口数据。
, t) V. a1 T2 @5.提取了初始年份和初始人口数。& D! K" l. ~0 B! n4 d  h$ J; c3 e

3 T6 m1 V7 I8 R# X5 M" \+ L% \( |" [4 w  @. v  i' ^- }: t
6.定义 Logistic 模型函数:! F. S  ^8 [: i! h
- G/ l1 [  ]3 K4 H- l) J
   def x(t, r, xm):
9 t$ K  n4 u; t" s& m. Q- P/ o4 |       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
& J! n9 E' Z, f% n2 u) s3 p. ?# z# F% l! Z! T% x. j) X
' }0 c) C4 Y9 P# J$ i) z6 Z' E
7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。# ^( C4 R" s4 `5 _9 O
9 z9 I* o1 K$ M4 G3 t7 r

' V* s! {* Q8 f  e0 H8.拟合参数:
2 z. P) d4 J. [: Z0 \; A0 }+ s
4 N  ?. V: |9 [. x- z1 C9 f   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))0 G* ]# V9 q/ m6 k3 d* N% ~
   r, xm = popt[0], popt[1]1 u* Q6 u3 E. f# s
6 C" @" s! ^8 Y1 Q4 J
0 \6 E- ^! [: b5 P
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
* e* ]' M" e) t% M% B" Y, P* {& X* F" ~* U/ [+ `
2 w" ~! v: M+ i  T5 R3 ~
10.预测 1900 年人口:: B1 @' J. f3 X$ r. D7 d
" p# ?4 A# ^1 r) \1 N& |6 J0 H
   print('population in 1900 =', x(1900, r, xm))
/ h1 B5 z# C. T
6 h0 Q7 O; n6 e
* ^$ Q, }# r1 \% v4 I/ _, t- ]! ]6 f11.使用拟合的参数预测了 1900 年的人口数。
" n4 t$ R  N/ r7 c! Q! ?" g4 z) e6 g8 M
: |7 \1 V0 b, z5 j4 g/ m
12.绘制预测曲线:7 P. k( @0 a/ s; H5 c2 g' U: |
/ K% k% I1 e8 q' i3 P9 E) d; }$ a
   year = np.linspace(1790, 2000, 21)
/ y3 r0 K$ O6 u4 n; q) t; n5 ^   population = [x(each, r, xm) for each in year]6 H. M- q; Z+ s; p2 o+ x
   plt.scatter(df['year'], df['population'], label='actual')
& Q6 E8 H0 Z; K1 G; H; u   plt.plot(year, population, label='predict', color='coral')$ f  F- t9 ]. z5 p/ A
   plt.legend()- v7 d$ |0 c, O+ H, U  b

3 U4 p  L! U3 V: x5 w2 I3 t1 ?* ^* q+ o" c, ?2 ?. e1 @
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。* N7 V6 p" P3 v& A4 I, @' ]# h" S% ~8 N
14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
( c1 J; n) \. n1 B* Z$ O& _) u' @3 |+ }6 K( F3 M: e& y( V7 y
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。# K! q: b: t6 s) P

; V& R' U/ ^" k2 K
; \% p. W% j1 A4 A

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-8-9 08:14 , Processed in 0.396495 second(s), 55 queries .

回顶部