基于灰色建模理论的灰色预测法,按照其预测问题的特征,可分为五种基本类型,即数列预测、灾变预测、季节灾变预测、拓扑预测和系统综合预测。这五种类型的预测方法,都是区域开发研究中重要而且常用的预测方法。本节只对数列预测法进行介绍。
灰色预测模型使用范围:
①数据样本点个数少,6-15个
②数据呈现指数或曲线的形式
③只适合做中短期预测,不适合长期预测。
数列预测就是对某一指标的发展变化情况所作的预测,其预测的结果是该指标在未来各个时刻的具体数值。譬如,在地理学研究中,人口数量预测、耕地面积预测、粮食产量预测、工农业总产值预测,等等,都是数列预测。
数列预测的基础,是基于累加生成数列的GM(1,1)模型。
设是所要预测的某项指标的原始数据。
一般而言,是一个不平稳的随机数列,对于这样一个随机数列,如果数据趋势无规律可循,则无法用回归预测法对其进行预测。
如果对作依次累加生成处理,即
则得到一个新的数列。这个数列与原始数列相比较,其随机性程度大大弱化,平稳程度大大增加。对于这样的新数列,其变化趋势可以近似地用如下微分方程描述:
在(1)式中,a和u可以通过如下最小二乘法拟合得到:
在(2)式中,YM为列向量YM=[x(0)(2),x(0)(3),…,x(0)(M)]T;B为构造数据矩阵:
微分方程(1)式所对应的时间响应函数为:
(3)式就是数列预测的基础公式,由(3)式对一次累加生成数列的预测值
可以求得原始数的还原值:
在(4)式中,t=1,2,…,M,并规定。原始数据的还原值与其观测值之间的残差值ε(0)(t)和相对误差值q(t)如下:
对于预测公式(3),我们所关心的问题是它的预测精度。这一预测公式是否达到精度要求,可按下述方法进行精度检验。
首先计算:
其次计算:方差比c=s2/s1
及小误差概率:
一般地,预测公式(3)的精度检验可由表10-2给出。如果p和c都在允许范围之内,则可以计算预测值。否则,需要通过对残差序列的分析对(3)式进行修正,灰色预测常用的修正方法有残差序列建模法和周斯分析法两种。
表1 灰色预测精度检验等级标准
二、引入残差模型的数列预测
当灰色预测精度检验等级标准超出所允许的范围时,需引入残差模型对GM(1,1)模型进行修正。具体模型如下:
原始残差序列(预测数列与原始数列只差)
使用该数据序列 建立残差GM(1,1)模型,
引入残差模型的影响,得新的预测序列
表2 城市交通噪声数据/dB(A)
序号 |
年份 |
|
序号 |
年份 |
|
1 |
1986 |
71.1 |
5 |
1990 |
71.4 |
2 |
1987 |
72.4 |
6 |
1991 |
72.0 |
3 |
1988 |
72.4 |
7 |
1992 |
71.6 |
4 |
1989 |
72.1 |
|
|
|
该例题matlab源代码如下:
clc,clear
x0=[71.1 72.4 72.4 72.1 71.4 72.0 71.6]';%注意这里为列向量
n=length(x0);
lamda=x0(1:n-1)./x0(2:n) %计算级比
range=minmax(lamda') %计算级比的范围
x1=cumsum(x0); %累加运算
B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];
Y=x0(2:n);
u=B\Y
syms x(t)
x=dsolve(diff(x)+u(1)*x==u(2),x(0)==x0(1));%求微分方程的符号解
xt=vpa(x,6)%以小数格式显示微分方程的解
yuce1=subs(x,t,[0:n-1]);%式1 为提高预测精度,先计算预测值,再显示微分方程的解。%%%这里,把[0:n-1]修改就可以了,如果预测后5年的,就改成n+4。
yuce1=double(yuce1);% 符号数转换成数值类型,否则无法做差分运算
yuce=[x0(1),diff(yuce1)] %差分运算,还原数据
yuce2=subs(x,t,[0:n+4]);%为提高预测精度,先计算预测值,再显示微分方程的解。
Yuce2=double(yuce2);%符号数转换成数值类型,否则无法做差分运算
yucexin=[x0(1),diff(yuce2)] %差分运算,还原数
%【直接把式1 总n-1修改,运算会提示错误,但是不影响,如果想消除错误提示,可以添加黄色区域的,计算出两个结果,一个结果是不预测的一个结果是预测的。】
epsilon=x0'-yuce %计算残差
delta=abs(epsilon./x0') %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda' %计算级比偏差值
这里再举一个例子:
假如有[71.1 72.4 72.4 72.1 71.4 72.0 71.6]这么一组数字,可以是连续几年的某商店收入,我们用灰色预测可以
预测出这组数据下一年的数值,通过把预测出的数据加入数组中,进而我们可以做到连续几年的预测
实现代码如下:
clc,clear
x0=[71.1 72.4 72.4 72.1 71.4 72.0 71.6]';%注意这里为列向量
n=length(x0);
lamda=x0(1:n-1)./x0(2:n); %计算级比
range=minmax(lamda'); %计算级比的范围
x1=cumsum(x0); %累加运算
B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];
Y=x0(2:n);
u=B\Y
syms x(t)
x=dsolve(diff(x)+u(1)*x==u(2),x(0)==x0(1));%求微分方程的符号解
xt=vpa(x,6)%以小数格式显示微分方程的解
yuce1=subs(x,t,[0:n-1]);%为提高预测精度,先计算预测值,再显示微分方程的解
yuce1=double(yuce1);%符号数转换成数值类型,否则无法做差分运算
yuce=[x0(1),diff(yuce1)]; %差分运算,还原数据
epsilon=x0'-yuce; %计算残差
delta=abs(epsilon./x0'); %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda';%计算级比偏差值