数学建模社区-数学中国

标题: 灰色预测模型Python代码 [打印本页]

作者: 2744557306    时间: 2024-12-21 16:49
标题: 灰色预测模型Python代码
[color=rgba(6, 8, 31, 0.88)]实现了一个灰色预测模型(GM(1,1)),用于对历史数据进行预测。灰色系统理论是处理不确定性和小样本数据的一种方法,GM(1,1)模型是最常用的灰色预测模型之一。
$ Q+ e9 Q% Z/ s. [7 ?9 e; \上面的代码实现了一个灰色预测模型(GM(1,1)),它基于灰色系统理论,主要用于处理小样本和不完全信息的问题。以下是代码中涉及的主要数学原理的详细解释:- q+ W) r: @! u6 c- R4 U7 J

, p' ~7 O9 K, `7 n  a### 1. 灰色系统理论
1 d4 K& c& A' V6 r; X* g1 J4 y) `$ ^' g
  d; m3 W+ n4 s1 ]  W) i# B- **灰色系统**:灰色系统是由邓小平于1980年代提出的,目的是为了处理信息不完全的系统。与传统方法不同,灰色系统基于已经存在的信息和系统的动态,结合不完全的信息进行预测和决策。
7 F  y; g1 X; B! e  Z. M
% }, O+ N, e( C! C, A6 O! ?. y) f### 2. 灰色预测模型 GM(1,1)
( V" r  `- \( k! S1 f8 O6 _5 J; U; h& K# U* \( c7 N: {
GM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:; {, _# g! W8 ^0 V& q/ K3 L
- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
% A: c  n' J: K; B$ q. Z2 q4 ^) R& J# x) i: E
#### 数学模型/ t' S' P' w6 `

% Y2 I3 b/ t% y3 X$ A* L将需要预测的变量表示为 \(X(0) = [x_0(0), x_1(0), \ldots, x_{n-1}(0)]\),然后构造其累加生成序列 \(X(1)\):3 N3 U5 a5 r% B+ K6 t
5 I0 F, ]! Z0 i0 T0 @/ l6 O  `8 Q' Q
\[; {6 B* {/ F# f- g. m" d! H
X(1) = [x_0(0), x_0(0) + x_1(0), \ldots, \sum_{j=0}^{n-1} x_j(0)]* h: @" _: z! }& W
\]8 R; l/ {8 W7 P) K3 h/ M9 o
4 f2 p: ]. E% U' T
### 3. 公式推导9 g+ a4 ~8 ]1 G- z1 @1 d
* o! @8 m* |9 u+ Q  p5 _
#### 3.1 数据矩阵与目标向量  I" i- }3 U5 y. X$ O
. F4 ^: y: b# [: ^5 d  N+ D0 w
在代码中构建了数据矩阵 \(B\) 和目标向量 \(Y\):
$ x9 o/ T! G7 I' t, M+ u; e, @2 B% R
\[$ t9 D3 X- E- u6 ~! w
B = \begin{bmatrix}
. x! D/ l& a5 }! `& v-0.5(X(1)[0] + X(1)[1]) & 1 \\
9 l& }4 p& Z# O, B5 j-0.5(X(1)[1] + X(1)[2]) & 1 \\! Z7 d. `2 I2 z- }8 r, i+ o5 m! A4 p
\vdots & \vdots \\9 T6 ]2 g" {6 m, r  T) X4 u
-0.5(X(1)[n-2] + X(1)[n-1]) & 1
7 v- M5 H0 R. h/ B) e$ g\end{bmatrix}; {: ?% j0 j  R
\]$ {. a! J7 e8 u" ]% k2 _: f- i
\[
) e: A# Z  E1 u. t3 i+ b  r4 a) l! SY = \begin{bmatrix}" v* |# S, c( E$ r$ e9 w; i
x_1(0) \\& t+ e8 B# \5 w% B7 i/ T* g/ R
x_2(0) \\$ w" o6 N7 L% J* h" i8 J
\vdots \\
! `( ?* a: @" |7 X* H* [. t% R+ vx_{n-1}(0)
, v. C0 ?, T. v$ {! O9 n7 J; J9 I\end{bmatrix}
, S6 ?  x3 p. ~3 M: A\]* D8 c4 M0 ^- S" Y5 f" O5 ]
9 m; t( C% _! v# Z9 l4 C# |
- **参数识别**:( F/ E9 [' x0 z% o5 [+ D- l9 a
将微分方程形式 \(-\frac{dx(t)}{dt} - ax(t) = u\) 转换为矩阵形式进行求解。
* I0 E7 U# I$ |5 R% m- s
: b& @) Q: M2 G+ x" k: m#### 3.2 最小二乘法  m# o: ?) e# K- \; v+ J$ ]7 j
- P- ^6 w# g' j+ d. ~3 n
通过最小二乘法求解参数:
$ }; x' Y- m: y3 a
  c8 ^) I! j1 q# J\[
: s, R5 |8 |5 d" ~0 tA = (B^TB)^{-1}B^TY5 _- x9 r/ O4 ^# K/ t
\]* \$ `* c) d+ c
( j. `; e2 A+ W* s+ m
- 这里 \(A\) 包含了两个参数 \(a\) 和 \(u\),即:' I5 R) `, z5 @7 }4 s  o
  - \(a\):表示数据的增长率
0 ]6 [5 u1 ]9 K  {% w1 K/ T+ T& y/ E  - \(u\):表示系统的外部干扰
" ^/ b$ F+ O! o3 q/ o: S$ K* v; i' n0 B/ e) G7 e, N
### 4. 灰色预测
7 D3 A2 J' }7 a, [5 {! |( a6 A2 I, F& G+ a
通过得到的参数 \(a\) 和 \(u\),利用以下公式更新预测值:2 ?6 L' A2 {0 J) T3 z
7 P1 i& H' [4 e
\[
* C: T) x2 c8 X5 A" c9 lx_{k+1}(1) = (x_0(0) - \frac{u}{a}) \cdot (1 - e^{-a(k)}) + \frac{u}{a}3 `  D1 q' Q4 `' x# ~. e: g
\]( J! E) |: I% N
. c' \) Y$ i5 z8 I' e1 V& ?
- 这里的预测值能够捕捉到数据的趋势,并在此基础上进行外推。
  V5 V, m0 @$ c; V8 z( v6 r/ \+ }$ G  S6 L, K, S$ @2 X% S1 n
### 5. 模型精度检验1 d) g  l- \, e' I# s+ R
- M9 G3 B' R3 P8 Y8 S
- **后验差比值 \(C\)**:- T8 l, V) d& k9 M
  \[
5 D5 j* A- p1 p. P  C = \frac{S_Y^2}{S_X^2}% f2 v  Z/ W/ E, V5 K( H9 P  ]
  \]
0 ?- G' @* Z* b- x2 x1 M; C  其中:
; y1 o! \+ O+ b* D0 |0 D8 q  - \(S_Y^2\):残差方差8 f  q- \; B1 Z) P. l3 L1 A7 x
  - \(S_X^2\):历史数据方差/ C3 d% y4 y% C% z7 C" o# y

. f7 j; f$ K* S- n" A( l1 y- **小误差概率 \(P\)**:通过检查绝对误差落在合理范围内的比例来评估模型的精度。若概率 \(P\) 大于 0.95,则认为预测效果良好。% n6 F' B" ^- S; n! P4 K  \6 z" e

$ e( v8 w: G8 }4 d- r
9 X& s' {8 a3 Y5 w; y2 c& ]% p' z% ~
; q. v0 v! [( O+ J% g) }  [) a3 C+ G+ e0 W2 h) |7 x- a1 W; C

, B( x+ J4 A* s  R' G+ \

灰色预测模型Python代码.txt

1.77 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5