数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-12-21 16:49
标题: 灰色预测模型Python代码
[color=rgba(6, 8, 31, 0.88)]实现了一个灰色预测模型(GM(1,1)),用于对历史数据进行预测。灰色系统理论是处理不确定性和小样本数据的一种方法,GM(1,1)模型是最常用的灰色预测模型之一。; e5 v, Q3 r; t, v% o3 M) y
上面的代码实现了一个灰色预测模型(GM(1,1)),它基于灰色系统理论,主要用于处理小样本和不完全信息的问题。以下是代码中涉及的主要数学原理的详细解释:& O8 p( }/ H" u+ H

, B/ L; p1 I) E3 Q  i3 H8 l### 1. 灰色系统理论' H3 I: P/ l# K; X% B$ `- R
0 S: B: \) @6 \
- **灰色系统**:灰色系统是由邓小平于1980年代提出的,目的是为了处理信息不完全的系统。与传统方法不同,灰色系统基于已经存在的信息和系统的动态,结合不完全的信息进行预测和决策。- [3 N# k0 ]  w$ d( l+ g
3 b: G! D# Q9 N* M% p1 ^
### 2. 灰色预测模型 GM(1,1)
% @# V( F1 j6 H; N* t( l- q
% [- \! C; ~# t, |# ?, x3 HGM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:
) Z2 a6 J$ M. d- K& ^3 _+ c% X. x- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
8 f* Z# S/ f4 H7 n4 J2 m. o. x% C) w5 G7 A# u5 i
#### 数学模型5 h; ]9 D/ G' p8 h2 m
3 {' ]- D6 R4 ]# S  E
将需要预测的变量表示为 \(X(0) = [x_0(0), x_1(0), \ldots, x_{n-1}(0)]\),然后构造其累加生成序列 \(X(1)\):* m6 f% y3 P3 H, C  R4 n1 |' X

1 o, F: `, {! }! h- g- q. p, H\[) t: r2 q6 Y' `+ e
X(1) = [x_0(0), x_0(0) + x_1(0), \ldots, \sum_{j=0}^{n-1} x_j(0)]
3 L7 d" W3 A: V+ r& m3 z6 l+ h. p" N\]" C, b+ Q* b& h2 o4 y. h- {
& s: M9 k. C3 p4 Q5 M: a% n$ K7 I1 A4 J
### 3. 公式推导
) q) s' u* c2 G4 N3 v! R- M3 Q+ o! t6 U# I4 A9 `7 {- A
#### 3.1 数据矩阵与目标向量! A/ [" C4 U- j/ c6 [
' j5 B8 j4 }" Y7 y, g7 J8 ~
在代码中构建了数据矩阵 \(B\) 和目标向量 \(Y\):) N/ g6 |  ^8 l3 x: }8 F

, I3 t$ `5 R4 o- a\[
' ^. y6 j$ C) O* V+ X: N5 aB = \begin{bmatrix}
& }3 u( v3 r4 b1 Q" l-0.5(X(1)[0] + X(1)[1]) & 1 \\
2 q0 M( p6 K: T- P- Q-0.5(X(1)[1] + X(1)[2]) & 1 \\* \2 Q4 }9 A6 n6 T# E3 Q
\vdots & \vdots \\
8 L$ o) F" o0 |: ]8 a-0.5(X(1)[n-2] + X(1)[n-1]) & 1
4 U$ B$ C" ]+ E. P: D\end{bmatrix}
. {4 M# ^# D  Z3 {2 z6 ?! g9 u\]( B+ [: W1 v7 o) L
\[
5 P5 s& z) i) \: A1 WY = \begin{bmatrix}
5 C) w' v/ D. Y+ @" Z5 \x_1(0) \\
3 u/ L" j, e" Ix_2(0) \\- ~- U* }' N6 N) x5 G
\vdots \\
: U1 [  Z9 j! _- H( Dx_{n-1}(0)+ U) @: O/ P; l# I
\end{bmatrix}
3 n6 ?$ h: b+ t7 \, W% s6 Q; i! g\]
; {0 X. I! N' n( k
3 v  ~4 V) O! ]  Q3 ^" O& S- **参数识别**:
6 k9 f* W+ o( v将微分方程形式 \(-\frac{dx(t)}{dt} - ax(t) = u\) 转换为矩阵形式进行求解。4 e- S4 `+ k. c0 r4 J; b

- b3 u+ {7 t7 q5 ?#### 3.2 最小二乘法) ]3 Q2 m* O. B& C, @" K( ]$ ]" Y

7 N/ D8 I4 L2 B) h0 _通过最小二乘法求解参数:/ G& M; C) x, ^

4 }! @$ X9 U; I$ b6 p* u. ~- s  ]\[
' M/ a  k- X6 z2 AA = (B^TB)^{-1}B^TY
+ w( i/ h9 k! A, ]- f\]
' h* ]; N" S1 l# X9 ^6 K
8 R1 m1 L4 S  H* `  ]2 p- 这里 \(A\) 包含了两个参数 \(a\) 和 \(u\),即:) E/ T0 a& [, |4 O  T
  - \(a\):表示数据的增长率3 I( |1 \* f! b
  - \(u\):表示系统的外部干扰2 P, C2 ?- S7 i7 |3 W
$ I3 ^/ o0 a( B) R
### 4. 灰色预测
% @5 s% P6 S+ j. N% L+ N! Y% M8 M
0 s9 X' E* t5 ^3 y  K' L- C通过得到的参数 \(a\) 和 \(u\),利用以下公式更新预测值:
2 G0 @$ \; }- `4 [
* U% A5 Q+ L" y8 Z1 G\[7 n/ O, Z9 d2 M' W+ u  h
x_{k+1}(1) = (x_0(0) - \frac{u}{a}) \cdot (1 - e^{-a(k)}) + \frac{u}{a}
+ L6 d/ R; Q9 V6 ~3 Z$ G+ q\]
$ l) z0 r# ~( }+ e( D: `) I. f! `4 z0 R" j
- 这里的预测值能够捕捉到数据的趋势,并在此基础上进行外推。
# p0 L- O+ v, O
- _% R' i( _+ `' d### 5. 模型精度检验
& q1 x% i$ }4 ^
- T) i/ I6 M1 j5 P3 R- z- **后验差比值 \(C\)**:
; b2 a1 E; s+ O$ q" N  \[
) z1 _# {- w* Q8 X$ _; l) T# ^  C = \frac{S_Y^2}{S_X^2}8 w; \( i1 s* ?+ b+ e
  \]4 s4 k& t  D% @: y! R
  其中:
4 w! h' t- N+ w) E5 m  - \(S_Y^2\):残差方差/ O1 j' ?! w( P  ]
  - \(S_X^2\):历史数据方差
+ }1 G) K# _6 C8 S7 Q
/ r6 @  G' O* m) h  R- **小误差概率 \(P\)**:通过检查绝对误差落在合理范围内的比例来评估模型的精度。若概率 \(P\) 大于 0.95,则认为预测效果良好。4 O! f- Z* J5 g
0 e* @  E, d- m( k" q0 \
7 X! O# V1 k: x) ]

( ~) u% R. X! z( {' q( j1 D, ?8 D+ Y; j" B  \
& V: i1 C, {% K

灰色预测模型Python代码.txt

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

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






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