数学建模社区-数学中国
标题:
灰色预测模型Python代码
[打印本页]
作者:
2744557306
时间:
2024-12-21 16:49
标题:
灰色预测模型Python代码
[color=rgba(6, 8, 31, 0.88)]
实现了一个灰色预测模型(GM(1,1)),用于对历史数据进行预测。灰色系统理论是处理不确定性和小样本数据的一种方法,GM(1,1)模型是最常用的灰色预测模型之一。
$ \3 c! s! w7 [5 U
上面的代码实现了一个灰色预测模型(GM(1,1)),它基于灰色系统理论,主要用于处理小样本和不完全信息的问题。以下是代码中涉及的主要数学原理的详细解释:
: ~3 U5 e( Q% J Z2 [
' q7 I% K! f5 _+ `3 N q+ z# q0 w& L
### 1. 灰色系统理论
, D0 ?: l% U2 \% S* y( c
( b( N. A7 C! h3 K+ ^1 M
- **灰色系统**:灰色系统是由邓小平于1980年代提出的,目的是为了处理信息不完全的系统。与传统方法不同,灰色系统基于已经存在的信息和系统的动态,结合不完全的信息进行预测和决策。
; G( D1 v& X' D8 X, v
" Q( M5 ^1 G6 R1 ]* k
### 2. 灰色预测模型 GM(1,1)
: h7 w/ U4 d/ A
; R4 j# c2 @( u3 `
GM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:
: O1 R- C1 j: q/ z1 y
- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
3 Q. A7 E! \5 P3 Z
/ o3 _% ^4 O/ }4 \4 D& U) W
#### 数学模型
; l3 c# m9 {! D1 E+ V" e" t" V( ^
+ h+ u# T: K3 G8 o
将需要预测的变量表示为 \(X(0) = [x_0(0), x_1(0), \ldots, x_{n-1}(0)]\),然后构造其累加生成序列 \(X(1)\):
- H5 |4 }: r& [% }- X1 D7 \& L
" Q/ e" o8 N% x: O2 x3 i- I; i4 d
\[
0 p8 ^- x) V% f# ^1 ]
X(1) = [x_0(0), x_0(0) + x_1(0), \ldots, \sum_{j=0}^{n-1} x_j(0)]
- Z, U3 y j# f: V& Z; {
\]
- h) m( A* Y) U3 V/ F3 e2 ]
5 u6 U- s' |+ ^! E3 [ p* d
### 3. 公式推导
, ?3 h0 t3 _: z9 N
9 M0 v. E( v& F, W6 L8 l1 h
#### 3.1 数据矩阵与目标向量
0 l3 E# `. \- w% ~
% B; c B+ a" B4 N4 _! o7 i3 U
在代码中构建了数据矩阵 \(B\) 和目标向量 \(Y\):
I; a4 @0 \' c* i- k. u, s
# G. Q' k3 ?# B' _6 S* r
\[
) y# z* d5 ^2 ^ R# M
B = \begin{bmatrix}
4 o6 d- \" i5 L. k p0 ]; e% o
-0.5(X(1)[0] + X(1)[1]) & 1 \\
$ D+ M) r9 q4 R1 O+ ^
-0.5(X(1)[1] + X(1)[2]) & 1 \\
: ~+ I8 W6 Z' w5 H$ q
\vdots & \vdots \\
0 |0 A N, }# @! l( n3 q
-0.5(X(1)[n-2] + X(1)[n-1]) & 1
- g3 E @& k& V! T3 s' ?; |
\end{bmatrix}
. {' A1 j- j$ a, X; Y0 B
\]
5 [: T( Z3 g' Y/ A/ I
\[
3 f8 I2 \: y" ?+ y7 ]& a* E m8 _
Y = \begin{bmatrix}
9 E' |: S8 g+ l) b% R( R$ X( ~. e
x_1(0) \\
* b; Y- v' [, A6 K
x_2(0) \\
0 t6 ?) y# I+ L \/ R
\vdots \\
6 O2 @( V8 K6 E9 q# h+ M6 J7 g
x_{n-1}(0)
) D, N5 f5 k; e' c3 A
\end{bmatrix}
2 M( A# M; C) K- o; \: I6 F
\]
) ?) \3 @0 q$ }5 e5 t- Z. ]7 v
# Z4 v2 C2 L4 x: U3 r
- **参数识别**:
|* A- I/ y; B i7 Z6 m4 x6 {
将微分方程形式 \(-\frac{dx(t)}{dt} - ax(t) = u\) 转换为矩阵形式进行求解。
: Y6 c& {+ C, z1 C( [7 B
& C' T; u( T) R) f
#### 3.2 最小二乘法
/ l# l$ Z1 Y7 n. T* C7 f
" `% v9 n2 a2 v Z
通过最小二乘法求解参数:
}2 R( G) d: }/ Y6 y' U
- { w b2 g. K: P( o- K. V
\[
6 n$ O; B4 B+ R" G8 E' q& x- L% ?
A = (B^TB)^{-1}B^TY
$ P, \1 }# G* B% t* U
\]
( d4 G M- k; G/ U& d
H W% z, D' S4 f2 {; N" C' b
- 这里 \(A\) 包含了两个参数 \(a\) 和 \(u\),即:
! W% L) Y( S5 X! u' y9 i
- \(a\):表示数据的增长率
2 {- O* b3 k) W7 g
- \(u\):表示系统的外部干扰
; K/ K- I& ? i) W) S
3 o8 ?/ t9 X' T& q0 V
### 4. 灰色预测
2 p- {% b+ |8 r! c* g
6 k9 }2 Z' L0 p( e. B( t
通过得到的参数 \(a\) 和 \(u\),利用以下公式更新预测值:
/ d# H* k8 d s) D+ c
" M8 y A* u; b
\[
7 |9 a, O0 f0 M8 c3 L. C& z" r, D8 f
x_{k+1}(1) = (x_0(0) - \frac{u}{a}) \cdot (1 - e^{-a(k)}) + \frac{u}{a}
3 v- O% ?+ ^; U6 S! g& H
\]
$ s0 ]- u1 _. Y7 q$ f
8 J$ Y p- f) _! g9 S# t1 \
- 这里的预测值能够捕捉到数据的趋势,并在此基础上进行外推。
8 `' M' t c+ W8 F3 f" `
3 P+ Q9 K, l- g! D F
### 5. 模型精度检验
3 M* c' `$ l/ i: a, z
' g" ^/ R1 M& p4 n
- **后验差比值 \(C\)**:
' v P8 g5 O+ g: r9 G' y
\[
9 _. `5 ^3 T$ E4 D; s" e
C = \frac{S_Y^2}{S_X^2}
! [% F7 k6 U3 q+ q3 P. C0 S! _# E% e1 a
\]
# e* O# X0 k- M1 o0 }
其中:
& e2 {1 L/ K3 N) Z: u7 ^# |; V
- \(S_Y^2\):残差方差
`5 ^( j$ B6 X
- \(S_X^2\):历史数据方差
. H. ^/ B, f# H! f
8 B0 }$ h6 {) f
- **小误差概率 \(P\)**:通过检查绝对误差落在合理范围内的比例来评估模型的精度。若概率 \(P\) 大于 0.95,则认为预测效果良好。
5 u+ V* Z0 H2 \ U
) W% b' _7 H. G- h4 L
4 C% D' C1 E$ u
6 M0 s7 M! r2 Q# V- ^) ]& p; s$ s" W
6 z Q- e; o) P/ y
0 f+ l! s( X0 Y; I0 h) e
灰色预测模型Python代码.txt
2024-12-21 16:47 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.77 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5