灰色预测算法应用

【级比判断】

clear
close all
clc

%导入数据
x0=[2.67 3.13 3.25 3.36 3.56 3.72];
n=length(x0);
%求级比
lamda=x0(1:n-1)./x0(2:n);
%级比判断
range=minmax(lamda);
range1=[exp(-2/(n+1)),exp(2/n+2)];
flag=1;

if(range(1)>range1(1)&&range(2)<range1(2))
    disp('级比检验通过');
    flag=1;
else
    flag=0;
    disp('级比检验未通过');
end

【级比检验通过】可以直接建模

%GM(1,1)建模

%AGO
x1=cumsum(x0);
%加权邻值生成
for i=2:n   
    z(i)=0.5*(x1(i)+x1(i-1));
end

B=[-z(2:n)',ones(n-1,1)];
Y=x0(2:n)';
u=B\Y;
a=u(1);b=u(2);
%预测后续数据
m=input('please input the number of the years you want to forecast:');
F=[];
F(1)=x0(1);
for i=2:(n+m)
    F(i)=(x0(1)-b/a)/exp(a*(i-1))+b/a;
end
disp('预测值为:')
F=[x0(1),diff(F)];
disp(F)

%计算残差  
epsilon=x0-F(1:n);

%计算相对误差
disp('相对误差为:');
delta=abs(epsilon./x0);
disp(delta)

%计算级比偏差
disp('级比偏差为:');
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda ;
disp(rho)

%作图
t1=1999:2004;
t2=2000:2004+m;
plot(t1,x0,'r*');
hold on;
plot(t2,F(2:n+m),'g-');


xlabel('年份');
ylabel('销售额');
legend('实际销售额','预测销售额');
title('产品销售额变化变化情况');
grid on;

【检验不通过】

%导入数据
x0=[444,895,573,443,629,509,594,842,300,567,852,542,546,459,557,354,917,421,522,856,535,518,459,532,430,490,830,442,948,344];
n=length(x0);
%求级比
lamda=x0(1:n-1)./x0(2:n);
%级比判断
range=minmax(lamda)
range1=[exp(-2/(n+1)),exp(2/n+2)]
flag=1;
if(range(1)>range1(1)&&range(2)<range1(2))
    disp('级比检验通过');
    flag=1;
else
    flag=0;
    disp('级比检验未通过');
end

%若级比检验未通过,则进行平行变换
while(flag==0)
    C=input('请选择常数C进行平移变换:');
    for i=1:n
        y0(i)=x0(i)+C;
    end
    lamda=y0(1:n-1)./y0(2:n);
    range=minmax(lamda);
    if(range(1)>range1(1)&&range(2)<range1(2))
        flag=1;
    else flag=0;
    end
end

%GM(1,1)建模

%AGO
x1=cumsum(y0);
%加权邻值生成
for i=2:n   
    z(i)=0.5*(x1(i)+x1(i-1));
end

B=[-z(2:n)',ones(n-1,1)];
Y=y0(2:n)';
u=B\Y;
a=u(1);b=u(2);
%预测后续数据
m=input('please input the number of the years you want to forecast:');
F=[];F(1)=y0(1);
for i=2:(n+m)
    F(i)=(y0(1)-b/a)/exp(a*(i-1))+b/a;
end
disp('预测值为:')
F=[x0(1),diff(F)-C]

%计算残差  
epsilon=x0-F(1:n);

%计算相对误差
disp('相对误差为:');
delta=abs(epsilon./x0)

%计算级比偏差
disp('级比偏差为:');
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda 

%作图
t1=1967:1996;
t2=1968:1996+m;
plot(t1,x0,'r*');
hold on;
plot(t2,F(2:n+m),'g-');
hold on;
y=ones(1,length(t2))*435;
plot(t2,y,'black');
xlabel('年份');
ylabel('降水量');
legend('实际降水量','预测降水量','阈值=435mm');
title('某地年降水量变化情况');
grid on;
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值