数学建模常用模型01 :.灰色预测法

基于灰色建模理论的灰色预测法,按照其预测问题的特征,可分为五种基本类型,即数列预测、灾变预测、季节灾变预测、拓扑预测和系统综合预测。这五种类型的预测方法,都是区域开发研究中重要而且常用的预测方法。本节只对数列预测法进行介绍。

灰色预测模型使用范围:

①数据样本点个数少,6-15个

②数据呈现指数或曲线的形式

③只适合做中短期预测,不适合长期预测。

数列预测就是对某一指标的发展变化情况所作的预测,其预测的结果是该指标在未来各个时刻的具体数值。譬如,在地理学研究中,人口数量预测、耕地面积预测、粮食产量预测、工农业总产值预测,等等,都是数列预测。

数列预测的基础,是基于累加生成数列的GM(1,1)模型。

{x^{(0)}}(1),{x^{(0)}}(2), \cdots ,{x^{(0)}}(M)是所要预测的某项指标的原始数据。

一般而言,\{ {x^{(0)}}(t)\} _t^M = 1是一个不平稳的随机数列,对于这样一个随机数列,如果数据趋势无规律可循,则无法用回归预测法对其进行预测。

如果对作依次累加生成处理,即

则得到一个新的数列\{ {x^{(1)}}(t)\} _t^M = 1。这个数列与原始数列% MathType!MTEF!2!1!+- % feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn % hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr % 4rNCHbWexLMBbXgBd9gzLbvyNv2CaeHbl7mZLdGeaGqiVu0Je9sqqr % pepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9vqaqpepm0xbba9pwe9Q8fs % 0-yqaqpepae9pg0FirpepeKkFr0xfr-xfr-xb9adbaqaaeGaciGaai % aabeqaamaabaabauaakeaacaGG7bGaamiEamaaCaaaleqabaGaaiik % aiaaicdacaGGPaaaaOGaaiikaiaadshacaGGPaGaaiyFamaaDaaale % aacaWG0baabaGaamytaaaakiabg2da9iaaigdaaaa!4A7D! \[\{ {x^{(0)}}(t)\} _t^M = 1\]\{ {x^{(0)}}(t)\} _t^M = 1相比较,其随机性程度大大弱化,平稳程度大大增加。对于这样的新数列,其变化趋势可以近似地用如下微分方程描述:

在(1)式中,a和u可以通过如下最小二乘法拟合得到:

     

在(2)式中,YM为列向量YM=[x(0)(2),x(0)(3),…,x(0)(M)]T;B为构造数据矩阵:

微分方程(1)式所对应的时间响应函数为:

(3)式就是数列预测的基础公式,由(3)式对一次累加生成数列的预测值{x^{(1)}}(t)

可以求得原始数的还原值:

 

在(4)式中,t=1,2,…,M,并规定。原始数据的还原值与其观测值之间的残差值ε(0)(t)和相对误差值q(t)如下:

对于预测公式(3),我们所关心的问题是它的预测精度。这一预测公式是否达到精度要求,可按下述方法进行精度检验。

首先计算:

 

其次计算:方差比c=s2/s1   

及小误差概率:

一般地,预测公式(3)的精度检验可由表10-2给出。如果p和c都在允许范围之内,则可以计算预测值。否则,需要通过对残差序列\{ {\varepsilon ^{(0)}}(t)\} _t^M = 2的分析对(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';%计算级比偏差值

 

猜你喜欢

转载自blog.csdn.net/qq_41686130/article/details/81370099