由于在数学建模的过程中,常常碰到需要做预测的问题,故本人最近学习了灰色预测模型。所谓灰色,是指对含有不确定因素的系统进行预测的方法。而自然界中的大多数问题都含有不确定因素,故这个算法对解决实际问题很有帮助,下面本人就谈谈自己一点浅薄的理解吧。
灰色预测模型(Gray Forecast Model)是通过少量的、不完全的信息,建立数学模型并做出预测的一种方法。灰色预测模型所需建模信息较少,运算方便,建模精度高。在灰色预测中,应用得最多的灰色预测模型是GM(1,1)模型,GM(1,1)模型是灰色系统理论中一种灰色动态预测模型。该模型将时间序列转化为微分方程,建立抽象系统的发展变化动态模型。
1.数据的检验与处理
为了保证GM(1,1)建模方法的可行性,需要对已知数据做必要的检验处理。
设原始数据列为$x^{(0)}=(x^0(1),x^0(2),….x^0(n))$,计算数列的级比:
$ \lambda(k)=\frac{x^{(0)}(k-1)}{x^{(0)}(k)}\quad,k=2,3,…,n$
如果所有的级比都落在可容覆盖区间$X=(e^{\frac{-2}{n+1}},e^{\frac{2}{n+1}})$内,则数列$x^{(0)}$可以建立GM(1,1)模型且可以进行灰色预测。否则,对数据做适当的变换处理,如平移变换:
$y^{(0)}(k)=x^{(0)}(k)+c\quad,k=1,2,…,n$(取c使得数据列的级比都落在可容覆盖内)
2.对历史时间序列数据进行一阶累加处理,得到生成数列$X^{(1)}$:$X^{(1)}=(X^{(1)}(1),X^{(1)}(2),…X^{(1)}(n))=(\sum\limits^{1}_{m=1}{x}^{(0)}(m),…,\sum\limits^{n}_{m=1}{x}^{(0)}(m))$
生产相应的均值序列:
$z^{(1)}=(z^{(1)}(2),X^{(1)}(3),…X^{(1)}(n))$,
式中$z^{(k)}=(0.5*X^{(1)}(k)+0.5X^{(1)}(k-1)),k=1,…n$
3.建立灰微分方程模型GM(1,1)
$x^{(0)}(k)+\alpha z^{(1)}(k)=b$
相应的白化微分方程模型为:$\frac{dx^{(1)}(t)}{dt}+ax^{(1)}(t)=b$
4.利用等式求得a,b的值$\left[\begin{matrix}a\\b\end{matrix}\right] =(B^TB^{-1})B^TY_1$
其中:
$$
Y=\left[\begin{matrix}X^{(0)}(2)\\X^{(0)}(3)\\M\\X^{(0)}(n)\end{matrix}\right]
$$
解为:$\hat{x}^{(1)}(k+1)=(x^{(0)}(1)-\frac{b}{a})e^{-ak}+\frac{b}{a}\quad ,k=1,2,…,n-1$
于是得到预测值:$\hat{x}^{(1)}(k+1)=(x^{(0)}(1)-\frac{b}{a})e^{-ak}+\frac{b}{a}\quad ,k=1,2,…,n-1$
从而相应地得到预测值:
$\hat{x}^{(0)}(k+1)=\hat{x}^{(1)}(k+1)-\hat{x}^{(1)}(k)\quad,k=1,2,…,n-1$
5.检验预测值
(1)残差检验:计算相对残差
$\varepsilon(k)=\frac{x^{(0)}(k)-\hat{x}^{(0)}(k)}{x^{(0)}(k)}\quad,k=1,2,…,n$
这里$\hat{x}^{(0)}(k)={x}^{(0)}(k),$如果对所有的$|\varepsilon(k)|<0.1$,则认为达到较高的要求;否则,若对所有的$|\varepsilon(k)|<0.2$,则认为达到一般要求。
(2)级比偏差值检验:首先由步骤1中的级比公式求出$\lambda(k)=\frac{x^{(0)}(k-1)}{x^{(0)}(k)}$
而后再由发展系数a,求出相应的级比偏差$\rho(k)=1-\frac{1-0.5a}{1+0.5a}\lambda(k)$
如果对所有的$|\rho(k)|<0.1$则认为达到较高的要求,否则,若对于所有的$|\rho(k)|<0.2$,则认为达到一般要求
1.首先准备数据,由于本人最近参加了数学建模美赛,故使用美赛mcm中c题的数据作为本例的数据。以az的天然气能源作为原始数据序列:
1990 | 1991 | 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | |
---|---|---|---|---|---|---|---|---|---|---|
原始值 | 343414.509 | 347261.3399 | 369742.9504 | 389838.7377 | 402390.1462 | 342889.3714 | 342839.3757 | 369871.869 | 386769.6754 | 403262.1076 |
2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | |
---|---|---|---|---|---|---|---|---|---|---|
预测值 | 387760 | 390850 | 393960 | 397100 | 400260 | 403450 | 406660 | 409900 | 413170 | 416460 |
原始值 | 432810 | 424023 | 406478 | 406536 | 425413 | 428444 | 4319845691 | 438524.2236 | 458726 | 413259 |
下面上matlab代码:
1 | clc,clear; |