数学建模社区-数学中国
标题:
灰色预测模型Python代码
[打印本页]
作者:
2744557306
时间:
2024-12-21 16:49
标题:
灰色预测模型Python代码
[color=rgba(6, 8, 31, 0.88)]
实现了一个灰色预测模型(GM(1,1)),用于对历史数据进行预测。灰色系统理论是处理不确定性和小样本数据的一种方法,GM(1,1)模型是最常用的灰色预测模型之一。
$ Q+ e9 Q% Z/ s. [7 ?9 e; \
上面的代码实现了一个灰色预测模型(GM(1,1)),它基于灰色系统理论,主要用于处理小样本和不完全信息的问题。以下是代码中涉及的主要数学原理的详细解释:
- q+ W) r: @! u6 c- R4 U7 J
, p' ~7 O9 K, `7 n a
### 1. 灰色系统理论
1 d4 K& c& A' V6 r; X* g1 J4 y) `$ ^' g
d; m3 W+ n4 s1 ] W) i# B
- **灰色系统**:灰色系统是由邓小平于1980年代提出的,目的是为了处理信息不完全的系统。与传统方法不同,灰色系统基于已经存在的信息和系统的动态,结合不完全的信息进行预测和决策。
7 F y; g1 X; B! e Z. M
% }, O+ N, e( C! C, A6 O! ?. y) f
### 2. 灰色预测模型 GM(1,1)
( V" r `- \( k! S1 f8 O6 _5 J; U
; h& K# U* \( c7 N: {
GM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:
; {, _# g! W8 ^0 V& q/ K3 L
- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
% A: c n' J: K; B$ q. Z2 q4 ^
) R& J# x) i: E
#### 数学模型
/ t' S' P' w6 `
% Y2 I3 b/ t% y3 X$ A* L
将需要预测的变量表示为 \(X(0) = [x_0(0), x_1(0), \ldots, x_{n-1}(0)]\),然后构造其累加生成序列 \(X(1)\):
3 N3 U5 a5 r% B+ K6 t
5 I0 F, ]! Z0 i0 T0 @/ l6 O `8 Q' Q
\[
; {6 B* {/ F# f- g. m" d! H
X(1) = [x_0(0), x_0(0) + x_1(0), \ldots, \sum_{j=0}^{n-1} x_j(0)]
* h: @" _: z! }& W
\]
8 R; l/ {8 W7 P) K3 h/ M9 o
4 f2 p: ]. E% U' T
### 3. 公式推导
9 g+ a4 ~8 ]1 G- z1 @1 d
* o! @8 m* |9 u+ Q p5 _
#### 3.1 数据矩阵与目标向量
I" i- }3 U5 y. X$ O
. F4 ^: y: b# [: ^5 d N+ D0 w
在代码中构建了数据矩阵 \(B\) 和目标向量 \(Y\):
$ x9 o/ T! G7 I' t
, M+ u; e, @2 B% R
\[
$ t9 D3 X- E- u6 ~! w
B = \begin{bmatrix}
. x! D/ l& a5 }! `& v
-0.5(X(1)[0] + X(1)[1]) & 1 \\
9 l& }4 p& Z# O, B5 j
-0.5(X(1)[1] + X(1)[2]) & 1 \\
! Z7 d. `2 I2 z- }8 r, i+ o5 m! A4 p
\vdots & \vdots \\
9 T6 ]2 g" {6 m, r T) X4 u
-0.5(X(1)[n-2] + X(1)[n-1]) & 1
7 v- M5 H0 R. h/ B) e$ g
\end{bmatrix}
; {: ?% j0 j R
\]
$ {. a! J7 e8 u" ]% k2 _: f- i
\[
) e: A# Z E1 u. t3 i+ b r4 a) l! S
Y = \begin{bmatrix}
" v* |# S, c( E$ r$ e9 w; i
x_1(0) \\
& t+ e8 B# \5 w% B7 i/ T* g/ R
x_2(0) \\
$ w" o6 N7 L% J* h" i8 J
\vdots \\
! `( ?* a: @" |7 X* H* [. t% R+ v
x_{n-1}(0)
, v. C0 ?, T. v$ {! O9 n7 J; J9 I
\end{bmatrix}
, S6 ? x3 p. ~3 M: A
\]
* D8 c4 M0 ^- S" Y5 f" O5 ]
9 m; t( C% _! v# Z9 l4 C# |
- **参数识别**:
( F/ E9 [' x0 z% o5 [+ D- l9 a
将微分方程形式 \(-\frac{dx(t)}{dt} - ax(t) = u\) 转换为矩阵形式进行求解。
* I0 E7 U# I$ |5 R% m- s
: b& @) Q: M2 G+ x" k: m
#### 3.2 最小二乘法
m# o: ?) e# K- \; v+ J$ ]7 j
- P- ^6 w# g' j+ d. ~3 n
通过最小二乘法求解参数:
$ }; x' Y- m: y3 a
c8 ^) I! j1 q# J
\[
: s, R5 |8 |5 d" ~0 t
A = (B^TB)^{-1}B^TY
5 _- x9 r/ O4 ^# K/ t
\]
* \$ `* c) d+ c
( j. `; e2 A+ W* s+ m
- 这里 \(A\) 包含了两个参数 \(a\) 和 \(u\),即:
' I5 R) `, z5 @7 }4 s o
- \(a\):表示数据的增长率
0 ]6 [5 u1 ]9 K {% w1 K/ T+ T& y/ E
- \(u\):表示系统的外部干扰
" ^/ b$ F+ O! o3 q/ o: S$ K* v
; i' n0 B/ e) G7 e, N
### 4. 灰色预测
7 D3 A2 J' }7 a, [5 {! |
( a6 A2 I, F& G+ a
通过得到的参数 \(a\) 和 \(u\),利用以下公式更新预测值:
2 ?6 L' A2 {0 J) T3 z
7 P1 i& H' [4 e
\[
* C: T) x2 c8 X5 A" c9 l
x_{k+1}(1) = (x_0(0) - \frac{u}{a}) \cdot (1 - e^{-a(k)}) + \frac{u}{a}
3 ` D1 q' Q4 `' x# ~. e: g
\]
( J! E) |: I% N
. c' \) Y$ i5 z8 I' e1 V& ?
- 这里的预测值能够捕捉到数据的趋势,并在此基础上进行外推。
V5 V, m0 @$ c; V8 z( v6 r/ \
+ }$ G S6 L, K, S$ @2 X% S1 n
### 5. 模型精度检验
1 d) g l- \, e' I# s+ R
- M9 G3 B' R3 P8 Y8 S
- **后验差比值 \(C\)**:
- T8 l, V) d& k9 M
\[
5 D5 j* A- p1 p. P
C = \frac{S_Y^2}{S_X^2}
% f2 v Z/ W/ E, V5 K( H9 P ]
\]
0 ?- G' @* Z* b- x2 x1 M; C
其中:
; y1 o! \+ O+ b* D0 |0 D8 q
- \(S_Y^2\):残差方差
8 f q- \; B1 Z) P. l3 L1 A7 x
- \(S_X^2\):历史数据方差
/ C3 d% y4 y% C% z7 C" o# y
. f7 j; f$ K* S- n" A( l1 y
- **小误差概率 \(P\)**:通过检查绝对误差落在合理范围内的比例来评估模型的精度。若概率 \(P\) 大于 0.95,则认为预测效果良好。
% n6 F' B" ^- S; n! P4 K \6 z" e
$ e( v8 w: G8 }4 d- r
9 X& s' {8 a3 Y5 w; y2 c& ]% p' z% ~
; q. v0 v! [( O+ J% g) }
[) a3 C+ G+ e0 W2 h) |7 x- a1 W; C
, B( x+ J4 A* s R' G+ \
灰色预测模型Python代码.txt
2024-12-21 16:47 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.77 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5