数学建模社区-数学中国
标题:
灰色预测模型Python代码
[打印本页]
作者:
2744557306
时间:
2024-12-21 16:49
标题:
灰色预测模型Python代码
[color=rgba(6, 8, 31, 0.88)]
实现了一个灰色预测模型(GM(1,1)),用于对历史数据进行预测。灰色系统理论是处理不确定性和小样本数据的一种方法,GM(1,1)模型是最常用的灰色预测模型之一。
Q0 F( J; i+ t( L, K
上面的代码实现了一个灰色预测模型(GM(1,1)),它基于灰色系统理论,主要用于处理小样本和不完全信息的问题。以下是代码中涉及的主要数学原理的详细解释:
4 l- L, y Z- L/ h+ k/ L) `
# X7 o3 X9 i+ ~* j0 X6 K
### 1. 灰色系统理论
3 _0 k, I% {2 M1 Y/ E$ k
* v5 s4 Q0 K7 |1 s3 n" g% c/ J$ i+ ?
- **灰色系统**:灰色系统是由邓小平于1980年代提出的,目的是为了处理信息不完全的系统。与传统方法不同,灰色系统基于已经存在的信息和系统的动态,结合不完全的信息进行预测和决策。
8 h8 v7 o8 Y W' w9 B* z; C, J. i% n
3 g2 l& I3 i; L+ ]% ~3 C
### 2. 灰色预测模型 GM(1,1)
6 e* }- c# |# H+ B9 K- @
' d( R3 v5 Q+ P' M6 ]% i
GM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:
2 B$ p* x( p$ Q2 U
- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
% x7 m9 }- @1 v5 a* H
. P7 g( J% V+ A
#### 数学模型
7 K# e" g5 L. Z, I7 O6 y. s
/ j) z$ w& H; T3 H
将需要预测的变量表示为 \(X(0) = [x_0(0), x_1(0), \ldots, x_{n-1}(0)]\),然后构造其累加生成序列 \(X(1)\):
/ v$ c) J! ^5 ]# ]! |9 M
, A$ [) n( g# L
\[
4 u7 N8 `$ p' R8 ~: e
X(1) = [x_0(0), x_0(0) + x_1(0), \ldots, \sum_{j=0}^{n-1} x_j(0)]
5 B+ a( J! S! ^, ]% b# K
\]
: @0 {) S' U! ^4 Q& U4 E, _
) K+ ]1 m4 u" f' x" {' U) B
### 3. 公式推导
6 L' v5 v6 [4 i! C! [
* |# r: P1 _6 o) I$ ]8 h; U& R
#### 3.1 数据矩阵与目标向量
1 w6 f' M5 U. ?4 j5 _4 n
8 s- J Q1 g1 Z, R" X& C* d
在代码中构建了数据矩阵 \(B\) 和目标向量 \(Y\):
4 [( x3 _+ B+ k4 w. J+ g+ Z
1 _: h& p2 C* m- C3 ^; C- _5 b
\[
; N! }' {% N( a) j' W3 w- E
B = \begin{bmatrix}
; ^4 ^0 A9 v B1 x
-0.5(X(1)[0] + X(1)[1]) & 1 \\
& F5 C- F5 h6 I% Z
-0.5(X(1)[1] + X(1)[2]) & 1 \\
, }" F* D0 w" M7 Z# o L* V6 Z# r
\vdots & \vdots \\
( d K! s% `; g. e
-0.5(X(1)[n-2] + X(1)[n-1]) & 1
: q* ^3 u3 T% z4 [7 o9 Z2 d
\end{bmatrix}
' s/ W* [" V. M! l. J C- c: J
\]
8 Z- |! I' J' o( Y2 o: F
\[
3 w4 H i) z; `
Y = \begin{bmatrix}
/ O% y* Z* _% ^. t4 Z
x_1(0) \\
: f4 Y5 F7 v7 e; W- ^- }
x_2(0) \\
! L% z& {' k9 G* Z3 L; m6 ?
\vdots \\
* X- e3 T: C1 Y* F) U
x_{n-1}(0)
$ E5 j7 w$ K1 B g" u# Y* J& i! ^. Z2 _
\end{bmatrix}
7 b5 R8 i. n5 ^' l1 ]! j |) a
\]
9 d. l% U" h3 i- p; X
4 T$ D5 G7 i9 j: k, ]8 O
- **参数识别**:
( |1 \; R( f& V9 ?: F+ M
将微分方程形式 \(-\frac{dx(t)}{dt} - ax(t) = u\) 转换为矩阵形式进行求解。
( V) P. o7 n# d$ ^! u5 G2 P* w) }* w
6 h* `* G' C5 I! V; C' x# c
#### 3.2 最小二乘法
; f) d0 f. j+ E4 C" |& \
/ u/ x) C/ n* ^+ Q! a; w/ q
通过最小二乘法求解参数:
# `# X! ^( Q! |4 i
3 `" \ G( ]7 _
\[
% v: z% ^5 H9 t, n6 T
A = (B^TB)^{-1}B^TY
9 h! Y! U0 J" v- n1 ?) }: W7 p: Q; z
\]
5 h1 b8 C, D* B$ f# w- K
h, `/ r) l, d
- 这里 \(A\) 包含了两个参数 \(a\) 和 \(u\),即:
. G! P1 Y8 y# ~9 A
- \(a\):表示数据的增长率
! q! L. S/ D8 @9 h1 U* C l* x
- \(u\):表示系统的外部干扰
# k* Z1 ?/ n0 C) O0 A3 w
; i; N( z( B% s8 `# ]
### 4. 灰色预测
5 f g3 p# \5 J2 A7 |, h
8 ]2 L* N1 P8 j& j
通过得到的参数 \(a\) 和 \(u\),利用以下公式更新预测值:
0 u3 d7 u" n) w% E( x% d) g
! l, E; `' A8 d; N9 Q. `
\[
) P8 I4 [" H# R! P2 Q
x_{k+1}(1) = (x_0(0) - \frac{u}{a}) \cdot (1 - e^{-a(k)}) + \frac{u}{a}
1 z# v3 E5 [' h( ~1 U+ s0 C
\]
7 N4 N8 C( p, l& A" g2 |. o, r- ^
/ e' R1 T1 J% S/ D$ }
- 这里的预测值能够捕捉到数据的趋势,并在此基础上进行外推。
' E$ b% t4 p+ i4 [
+ I1 l. H, ~) k. x$ c4 {6 `
### 5. 模型精度检验
) f, h; F3 E6 l* b4 ] u
% v& [' t! J2 ]& C, `
- **后验差比值 \(C\)**:
; U! G% a7 n* }- E& e$ `
\[
% w5 @+ j( B1 s0 i P
C = \frac{S_Y^2}{S_X^2}
& A/ u* B6 s4 q" h9 p
\]
+ @" O4 H; s! s% m0 q
其中:
5 s% A( X4 L! }1 q/ d8 i/ \* g& n
- \(S_Y^2\):残差方差
) Z# c2 S7 M. u# J! J4 V4 ~. y( q
- \(S_X^2\):历史数据方差
1 Z. \8 K# h; D( Z s
; h. ~% r$ K( w! D% I8 F- w
- **小误差概率 \(P\)**:通过检查绝对误差落在合理范围内的比例来评估模型的精度。若概率 \(P\) 大于 0.95,则认为预测效果良好。
* a3 z4 \1 p, r+ w1 j* n! i& [
1 ?& c/ o3 N- I3 P9 d* u' a
3 g. g- }9 }+ s4 s! f- z# K
5 m" K' L; r( o( P7 S- ?9 `
7 v" |) G$ p# A1 R$ B4 K+ Y- u! n% g- g
, Q1 I! P0 ]- h
灰色预测模型Python代码.txt
2024-12-21 16:47 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.77 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5