参考资料:
《数学建模算法与应用(第2版)》(司守奎主编)
https://wenku.baidu.com/view/7864cb58866fb84ae45c8d65
https://wenku.baidu.com/view/eb12b9d233d4b14e8524689f.html
灰色系统,顾名思义,是白色系统和黑色系统的中间态。
白色系统是指一个系统的内部特征是完全已知的,即系统的信息是完全充分的。
而黑色系统是指一个系统的内部信息对外界来说是一无所知的,只能通过它与外界的联系来加以观测研究。
灰色系统内的一部分信息是已知的,另一部分信息时未知的,系统内各因素间具有不确定的关系。
灰色模型可用于对已知信息少的系统预测未来的发展,适合于“已知过去十年的指标数据,求预测未来十年的指标数据”此类题目。
GM(1,1) 标准模型
模型引入
灰色模型(Gray Model)这里仅讨论常用的 GM(1,1) 标准模型。
已知序列
x(0)=(x(0)(1),x(0)(2),⋯,x(0)(n)) 求预测 $x^{(k)}$
这个序列的元素即为 x(0)(i) 的预测值。(这其实和拟合有一点 相似,不过拟合可能是已知上百个点,而灰色模型只需要几个点)
首先通过计算累加序列将序列变为光滑、递增的序列:
x(1)=(x(0)(1),i=1∑2x(0)(i),⋯,i=1∑nx(0)(i)) 这个过程称为一次累加生成(1-AGO
, Accumulating Generation Operator
)
接下来建立基本模型 GM(1,1),即白化方程(顾名思义,将灰色模型变成白色模型的方程)是一阶微分方程,即
dtdx(1)+ax(1)=b 其中,a,b 为使用最小二乘法算出的常数,其公式为:
[a,b]T=(BTB)−1BTYB=⎣⎢⎢⎢⎢⎡−z(1)(2)−z(1)(3)⋮−z(1)(n)11⋮1⎦⎥⎥⎥⎥⎤,Y=⎣⎢⎢⎢⎢⎡x(0)(2)x(0)(3)⋮x(0)(n)⎦⎥⎥⎥⎥⎤ 其中
z(1)(k)=0.5x(1)(k)+0.5x(1)(k−1) 解上述微分方程可得:
x^(1)(t+1)=[x(0)(1)−b/a]e−at+b/a 然后对累计序列进行还原可得:
x^(0)(t+1)=x^(1)(t+1)−x^(1)(t)=(1−ea)[x(0)(1)−b/a]e−at 模型检验
模型检验有三种方法:残差检验、后验差比值、小误差概率。
残差检验
残差检验需要先计算绝对残差序列:
e(0)(i)=∣∣∣∣x(0)(i)−x^(0)(i)∣∣∣∣i=1,2,…,n 然后计算相对残差:
εi=X(0)(i)e(0)(i)×100%i=1,2,…,n 求平均得平均相对残差:
εˉ=n1i=1∑nεi 给定 α,当 ε<α,且 εn<α 成立,称模型为残差合格模型。
当 α 没有给出时,可取 α=1%。
后验差比值
计算原始序列和残差序列的标准差,分别记作 S1 和 S2。
S12S22=n1k=1∑n[x(0)(k)−xˉ(0)]2=n1k=1∑n[e(0)(k)−eˉ(0)]2 其中,
xˉ(0)=n1k=1∑nx(0)(k),eˉ(0)=n1k=1∑ne(0)(k) 然后计算后验差比值:
C=S1S2 后验差比值的精度标准将在后面与小误差概率一并给出。
小误差概率
计算绝对残差序列的均值:
eˉ(0)=n1k=1∑ne(0)(k) 然后计算以下概率:
p=P{∣∣∣∣e(0)(k)−eˉ(0)∣∣∣∣<0.6475S1} 下表为灰色模型预测精度等级。
等级精度 | 后验差比值 C | 小概率误差 p |
好 | ⩽0.35 | ≥0.95 |
合格 | 0.35<c⩽0.50 | 0.80⩽p<0.95 |
勉强 | 0.50<c⩽0.65 | 0.70⩽p<0.80 |
不合格 | >0.65 | <0.70 |
基于背景值优化的改进 GM(1,1) 模型
该部分由 @Anne_kj (opens new window) 撰写。
设原始非负数据序列为
$X^{(0)}=\left\{x^{(0)}(1), x^{(0)}(2), \cdots, x^{(0)}(n)\right\}$
作一次累加 (1 - AGO) 得:
X(1)={x(1)(1),x(1)(2),⋯,x(1)(n)} 其中,x(1)(k)=∑i=1kx(0)(i),k=1,2,⋯,n
对生成序列 X(1)(k) 建立灰色白化微分方程为:
dtdx(1)(t)+ax(1)(t)=u 将上式在区间 [k,k+1] 上积分,得:
x(1)(k+1)−x(1)(k)+a∫kk+1x(1)(t)dt=u 其中,k=1,2,⋯,n−1。则有:
x(0)(k+1)+a∫kk+1x(1)(t)dt=u 设 z(1)(k+1)=∫kk+1x(1)(t)dt 为 x(1)(t) 在区间 [k,k+1] 的背景值,则有
x(0)(k+1)+az(1)(k+1)=u 然而函数 x(1)(t) 并不知道,但根据一阶微分方程的解为指数函数,故可令:
x(1)(t)=cebt 并假设该曲线过点 (k,x(0)(k)) 及 (k+1,x(0)(k)), 则有
x(1)(k)=cebk,x(1)(k+1)=ceb(k+1) 由以上两式可解得:
b=lnx(1)(k+1)−lnx(1)(k)c=ebkx(1)(k)=[x(1)(k+1)]k[x(1)(k)]k+1 因此背景值为:
z(1)(k+1)=∫kk+1x(1)(t)dt=∫kk+1cebtdt=lnx(1)(k+1)−lnx(1)(k)x(1)(k+1)−x(1)(k) 待辨参数 a,u 可用最小二乘法求出
Φ^=[a^u^]T=(BTB)−1BTY 其中
Y=⎣⎢⎢⎢⎢⎡x(0)(2)x(0)(3)⋮x(0)(n)⎦⎥⎥⎥⎥⎤,B=⎣⎢⎢⎢⎢⎡−z(0)(2)−z(0)(3)⋮z(0)(n)11⋮1⎦⎥⎥⎥⎥⎤ z(1)(k+1) 为由前面分析确定的背景值。
求出待辨识参数后,可得白化方程的离散解为:
x^(1)(k+1)=[x(1)(1)−a^u^]e−a^k+a^u^ 进行一次累減还原,可得原始数据序列的模拟值为:
x^(0)(k+1)=x^(1)(k+1)−x^(1)(k)=(1−ea)[x(1)(1)−a^u^]e−a^k GM(1, 1) 新陈代谢模型
若要进一步提高预测精度,可采用 GM(1, 1) 新陈代谢模型。首先采用原始序列建立 一个 GM(1, 1) 模型,按上述方法求出一个预测值,然后将该预测值补入已知数列中,同时 去除一个最旧的数据;在此基础上再建立 GM(1, 1) 模型,求出下一个预测值,以此类推。通过预测灰数的新陈代谢,逐个预测,依次递补,可以得到之后几期的数据,对原始数据数量进行有效扩充。
例题
例题可见本文开头的链接。