数学建模社区-数学中国
标题:
灰色预测模型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 H
GM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:
) Z2 a6 J$ M. d- K& ^3 _+ c% X. x
- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
8 f* Z# S/ f4 H7 n
4 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 a
B = \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 W
Y = \begin{bmatrix}
5 C) w' v/ D. Y+ @" Z5 \
x_1(0) \\
3 u/ L" j, e" I
x_2(0) \\
- ~- U* }' N6 N) x5 G
\vdots \\
: U1 [ Z9 j! _- H( D
x_{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 A
A = (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
2024-12-21 16:47 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.77 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5