数学建模社区-数学中国

标题: 灰色预测模型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]) & 17 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 cY = \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. }' |" Sx_{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 }  dA = (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 d6 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 Dx_{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; I9 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

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

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






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