数学建模社区-数学中国
标题:
灰色预测模型Python代码
[打印本页]
作者:
2744557306
时间:
2024-12-21 16:49
标题:
灰色预测模型Python代码
[color=rgba(6, 8, 31, 0.88)]
实现了一个灰色预测模型(GM(1,1)),用于对历史数据进行预测。灰色系统理论是处理不确定性和小样本数据的一种方法,GM(1,1)模型是最常用的灰色预测模型之一。
) k/ Q, U4 n" Z2 g) |9 O
上面的代码实现了一个灰色预测模型(GM(1,1)),它基于灰色系统理论,主要用于处理小样本和不完全信息的问题。以下是代码中涉及的主要数学原理的详细解释:
6 ^! Y0 B3 H9 j. [$ d" \
/ V) V; O7 ~6 h5 c6 p
### 1. 灰色系统理论
3 u3 @6 N& W6 W
; n1 }; L* R! h5 l% ]
- **灰色系统**:灰色系统是由邓小平于1980年代提出的,目的是为了处理信息不完全的系统。与传统方法不同,灰色系统基于已经存在的信息和系统的动态,结合不完全的信息进行预测和决策。
4 |4 U8 K, \$ B6 v _3 f L
8 _ a% w# ?: e& [) ~
### 2. 灰色预测模型 GM(1,1)
3 {4 t+ S: T4 v
' b* f4 ^0 z/ U1 {
GM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:
9 @ `" R5 c$ g( [
- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
4 e5 _2 i7 K6 r+ @+ V
1 J M0 M3 ~5 \0 u# b
#### 数学模型
. V) G2 ?* o5 e+ p$ [5 B
8 y2 T# h7 t5 j: r: L5 S2 Y8 g; A
将需要预测的变量表示为 \(X(0) = [x_0(0), x_1(0), \ldots, x_{n-1}(0)]\),然后构造其累加生成序列 \(X(1)\):
3 ^& L V, m! B
0 a1 Q* E8 Q' k! ^. A+ O9 R* `! \. ?4 @
\[
- P U3 m. s# M" T3 Q: Z& _# M0 ^. T
X(1) = [x_0(0), x_0(0) + x_1(0), \ldots, \sum_{j=0}^{n-1} x_j(0)]
e, S. V) t* w- u% M& j4 A
\]
/ h# k# y+ N2 | L
$ v+ F- B8 G4 ^+ t s' ~
### 3. 公式推导
! t& Z9 F: j& l6 ^
+ u; n: P7 n& }8 J" l* [
#### 3.1 数据矩阵与目标向量
; s5 P+ p: b# E9 n; l7 k1 d
! o) L' I: w& Z* Q4 @# ^( a6 F
在代码中构建了数据矩阵 \(B\) 和目标向量 \(Y\):
, \, Z: p6 H% W. i9 {2 j# t
/ h6 ^& y" e2 t# s$ R2 }7 a) B
\[
' [3 R( ?" }7 ?. j% P& k% ?
B = \begin{bmatrix}
2 F- O) G @8 q! l5 @
-0.5(X(1)[0] + X(1)[1]) & 1 \\
$ P6 L l: p5 H7 \) G% G
-0.5(X(1)[1] + X(1)[2]) & 1 \\
e7 w7 R7 f# }. Y8 p
\vdots & \vdots \\
& u& |7 o! C9 y5 B+ s9 ]
-0.5(X(1)[n-2] + X(1)[n-1]) & 1
7 b4 f/ H, ~5 h& D4 ^1 }
\end{bmatrix}
' V; d9 q# J$ f% j+ B
\]
\& A1 ^5 r) P3 T% k* v! L+ W
\[
' C4 k- w2 ^4 A8 M1 m+ S7 o1 T6 c
Y = \begin{bmatrix}
! V" U5 M% z) a( u+ G
x_1(0) \\
' x, ]1 U5 V, _
x_2(0) \\
1 y$ \% d8 R9 Q- z. z+ n
\vdots \\
; R) ?5 c. }' |" S
x_{n-1}(0)
, ~1 O# R- V$ { k7 `# t$ y
\end{bmatrix}
" G1 y6 i5 d* [9 o: ^
\]
. d Y S$ `2 P ?. }
& j+ y1 S h% H0 f& h% O/ O
- **参数识别**:
* U+ ^" v- t7 S: Q7 N U
将微分方程形式 \(-\frac{dx(t)}{dt} - ax(t) = u\) 转换为矩阵形式进行求解。
6 x: @3 }9 H8 ?* s. {* {
8 y4 z/ Z3 R( b: O0 v3 T2 t
#### 3.2 最小二乘法
$ D& D+ L6 b5 L P) L2 M6 U
% m9 X- @6 q) z9 A
通过最小二乘法求解参数:
/ c7 M4 D# @% i
1 \/ {+ p( g" n- d" ?6 J
\[
* q) B# Z4 L* U2 } d
A = (B^TB)^{-1}B^TY
: E+ |) a6 P" p6 f0 b" U* O- j+ S
\]
% g) a, o9 n2 q8 f) e' O
' k. j- I$ i, G7 h$ |0 \, y; z
- 这里 \(A\) 包含了两个参数 \(a\) 和 \(u\),即:
: o* u7 y' _$ i# M U
- \(a\):表示数据的增长率
! ]5 C; c7 Y* w; A! O
- \(u\):表示系统的外部干扰
, V) E; y c0 o9 i+ d: p% }
0 i. A$ |! D c% ~
### 4. 灰色预测
9 K1 ]8 P7 S) u) |; h0 Y* u3 d
6 S+ q7 h( S( o- I) S) W* k
通过得到的参数 \(a\) 和 \(u\),利用以下公式更新预测值:
- [' e) z7 H( b" n2 P3 Y0 n" f, ~ F ^
5 |! @3 r0 R7 z T
\[
1 I0 g M; P# [" O5 [4 D
x_{k+1}(1) = (x_0(0) - \frac{u}{a}) \cdot (1 - e^{-a(k)}) + \frac{u}{a}
* `9 o5 p) ` g- j7 ?) i4 j
\]
8 a" g9 Z& ]" w4 d
W: K5 i) C5 t: a- P+ F
- 这里的预测值能够捕捉到数据的趋势,并在此基础上进行外推。
3 D' m1 K( }. O, x( d$ R7 n
$ n3 i/ \; I6 ?$ {: ]; A% [( b
### 5. 模型精度检验
3 I4 t& O3 G! S; w
1 R$ m( `6 \/ r) X* X
- **后验差比值 \(C\)**:
& Q9 h1 g9 [! v# d1 |' ?
\[
8 C j7 I) Y" {$ P
C = \frac{S_Y^2}{S_X^2}
! D& W8 g6 F* g! i3 J3 u0 D# [
\]
2 v0 K9 ]) ^, P4 u& _. ]
其中:
# Y. _0 f r8 d* z
- \(S_Y^2\):残差方差
$ K3 J$ @2 D% ?7 [ x5 M
- \(S_X^2\):历史数据方差
$ ~ s) r/ C5 D! j; w( d: `" c% m0 r
. I& i. A3 S/ m; q
- **小误差概率 \(P\)**:通过检查绝对误差落在合理范围内的比例来评估模型的精度。若概率 \(P\) 大于 0.95,则认为预测效果良好。
' ^+ S; |5 `) j9 P& q; I
9 P& |, b) N0 q2 h: E
" A" A: j" T8 ?, W( f* r! u1 L" }- I
- v1 C# E) F9 O
* v5 F! M; |6 [- B
- O. u: G/ Q6 ~3 }" C
灰色预测模型Python代码.txt
2024-12-21 16:47 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.77 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5