数学建模社区-数学中国

标题: 灰色预测模型Python代码 [打印本页]

作者: 2744557306    时间: 2024-12-21 16:49
标题: 灰色预测模型Python代码
[color=rgba(6, 8, 31, 0.88)]实现了一个灰色预测模型(GM(1,1)),用于对历史数据进行预测。灰色系统理论是处理不确定性和小样本数据的一种方法,GM(1,1)模型是最常用的灰色预测模型之一。
1 X, U& p3 a" P& H/ i: V8 d0 y( R上面的代码实现了一个灰色预测模型(GM(1,1)),它基于灰色系统理论,主要用于处理小样本和不完全信息的问题。以下是代码中涉及的主要数学原理的详细解释:8 ~- |8 Y+ K* w+ ]+ s6 N# ?

" g' i1 A2 S/ \) f### 1. 灰色系统理论4 I+ C7 t  f+ S3 P6 t) X
7 z+ Q$ \, ?( j* c: {
- **灰色系统**:灰色系统是由邓小平于1980年代提出的,目的是为了处理信息不完全的系统。与传统方法不同,灰色系统基于已经存在的信息和系统的动态,结合不完全的信息进行预测和决策。
4 t, s$ o1 h+ ?' T  c- n+ ~6 |
8 h  L* S; l2 X) o# R### 2. 灰色预测模型 GM(1,1), c: w) p# }9 ]' N. F* A- m: U* H

/ R5 @7 {% q& k% e( UGM(1,1)模型是最简单的灰色模型,表示“灰色”与“预测”的结合,具体表示如下:
3 k1 c, Z( Q2 g: k5 E- **GM(1,1)**中的“1”指的是模型中考虑的变量个数(自变量和因变量各1个),而另一个“1”则表示其是一个微分方程。
, H, j( b+ i* d% [: z/ B5 A( A
1 z2 K& M5 t: l# [5 G& W  \) ?#### 数学模型
! q. O. K; P& o1 _
' A$ Y0 o2 Q7 I将需要预测的变量表示为 \(X(0) = [x_0(0), x_1(0), \ldots, x_{n-1}(0)]\),然后构造其累加生成序列 \(X(1)\):6 }' `- f( |# ^+ e1 V& w/ O

7 D. x% [# G" {( W: i\[! D- M/ ]2 G6 h) S1 ^1 P4 Q
X(1) = [x_0(0), x_0(0) + x_1(0), \ldots, \sum_{j=0}^{n-1} x_j(0)]
; t1 D' w+ r2 l: g) d3 L\]
7 ~1 }$ i5 V# O& L0 `. i7 ]! T# ^
# Z, L* _, U/ o1 g& I4 v! q, Z2 C### 3. 公式推导
) Y  E  t* D; @6 G+ o. d  F  `: T, y. S+ i4 Z/ {6 F
#### 3.1 数据矩阵与目标向量$ Y  K9 p8 _+ I/ ^. j

" l) ~- d9 T7 i  z8 K在代码中构建了数据矩阵 \(B\) 和目标向量 \(Y\):
2 E4 K7 D7 x% `4 K6 M
1 X1 ~# M: K: i  M. |$ A4 e\[( E9 ?2 [# ^$ m
B = \begin{bmatrix}
: `! \7 Z" V1 [6 g( S9 ^-0.5(X(1)[0] + X(1)[1]) & 1 \\8 t. O+ J, O* t2 m$ a+ f
-0.5(X(1)[1] + X(1)[2]) & 1 \\: G5 I" _- b5 t7 ^* f3 N
\vdots & \vdots \\
! [# y8 s! {: ^  v/ S# Q-0.5(X(1)[n-2] + X(1)[n-1]) & 1( o9 @9 I7 R4 U$ Z
\end{bmatrix}/ y9 O, y9 _) P/ L/ g
\]- |% K2 F+ u: f  f: A
\[
% F5 A5 h  _+ X9 `/ n5 ]  r9 jY = \begin{bmatrix}* M1 o! ]- {' C
x_1(0) \\( L0 z8 f+ o" H- E) s  h
x_2(0) \\
0 Z1 {1 {3 X* s; t5 ^\vdots \\
  u: D: o* j" {x_{n-1}(0)
" Q" i5 Q' k+ S/ u\end{bmatrix}) K0 l7 I" B- ~6 L+ e) @
\]* O( B' Y8 M2 @# I+ a& N  J

! w" e4 {, z, w, L- **参数识别**:2 S( F# i- [1 {# b" x- z6 W: Y) ^
将微分方程形式 \(-\frac{dx(t)}{dt} - ax(t) = u\) 转换为矩阵形式进行求解。9 X- @7 q. M" ]9 Z0 F' y

7 N$ Y6 j; K0 p9 _9 h#### 3.2 最小二乘法, T# R$ }0 F0 Q' M: Z2 O& K
( t: r2 V! V9 I2 r' y9 G0 ]
通过最小二乘法求解参数:
% b1 f6 `$ F/ A6 `2 a) K" t" i/ U8 y% B
2 D) g) M/ H; U( r0 E\[0 W7 B, O1 i" r( q- j9 H6 `! r$ K2 `
A = (B^TB)^{-1}B^TY
- s5 G7 P+ I9 S5 S- j* ], k1 C\]! T; T  h/ [4 z; t, r

  m: h8 F: ^$ M8 f0 e- 这里 \(A\) 包含了两个参数 \(a\) 和 \(u\),即:0 ]' G7 b3 w9 x- i8 B
  - \(a\):表示数据的增长率
3 ~" `6 a* g' B* P2 g7 [, K: |  - \(u\):表示系统的外部干扰
) e4 L& W& g5 d; @
! o: k" T4 A$ {0 A' w8 h, L### 4. 灰色预测
0 V+ p: \5 o4 V1 R+ f5 E1 J$ v3 G4 ^$ }( ?$ Z4 p; J- z; f) |
通过得到的参数 \(a\) 和 \(u\),利用以下公式更新预测值:
( f* @( K) i( s9 O' t9 X( o/ O
\[
& _; ?% O5 J6 m' z1 jx_{k+1}(1) = (x_0(0) - \frac{u}{a}) \cdot (1 - e^{-a(k)}) + \frac{u}{a}
. h/ {2 C0 A- f. U\]- T/ n6 @8 u9 F% [' A* O
2 ^2 h, m- ]$ k
- 这里的预测值能够捕捉到数据的趋势,并在此基础上进行外推。
6 B$ Y& f) P: }) s4 H7 G. U
" S" H2 p3 Q* [2 v### 5. 模型精度检验$ T3 x) I/ w# B: A

: e6 _5 B5 j; f( @* H+ o2 ~- **后验差比值 \(C\)**:1 \3 n5 w. n. o8 c
  \[3 _/ Y6 A% n. l4 ?8 N
  C = \frac{S_Y^2}{S_X^2}& y- f  G3 R' Y2 k! k6 H
  \]
* G/ T6 @1 Z: o  其中:# g  l$ {, |9 j! ~+ B* s+ r
  - \(S_Y^2\):残差方差1 N5 p- {3 S) c& C$ \
  - \(S_X^2\):历史数据方差! D. u: T3 `: p; R
# e" W( z5 s( j' E/ u# m* h
- **小误差概率 \(P\)**:通过检查绝对误差落在合理范围内的比例来评估模型的精度。若概率 \(P\) 大于 0.95,则认为预测效果良好。
$ D3 h( s; o2 s. G0 g2 [
7 A# S' N& t( ^9 M( ?1 N
% O7 ?: R4 m+ l' @& D, j
; K& k7 t% V1 u! X. ~( T' i, ~* Z( s0 ^4 O

# y4 w! F8 L% J1 }% _. G4 |, W

灰色预测模型Python代码.txt

1.77 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5