Matlab实现改进灰色预测GM(1,1)

参考论文:

[1]佚名. 灰色预测GM(1,1)模型的改进及应用[J]. 数学的实践与认识, 2011, 41(23):8.

详细介绍请查看论文,介绍很详细,本文只作记录。

本文用Matlab复现了论文第三部分的改进的灰色预测GM(1,1)模型,如有错误,敬请指正。

% GM(1,1)模型
% yuce : 预测值
% epsilon : 残差		(<0.2一般要求 <0.1较高要求)
% delta : 相对误差
% rho : 级比偏差值 (<0.2可以接受 <0.1较好)
clc,clear;
x0 = xlsread('工作簿1.xlsx');
k = input('请输入预测年数:');
%导入数据,这里为列向量
n = length(x0);
lamda = x0(1:n-1)./x0(2:n); % 级比 ——8个数据
range = minmax(lamda'); %级比范围  
if range(1,1) < exp(-2/(n+2)) || range(1,2)>exp(2/(n+2))
    error('级比没有落入灰色模型的范围内')
else 
    %空行输出
    disp('         ');
    disp('可以用GM(1,1)建模')
end
x1 = cumsum(x0) ;%累加运算
R= [1:n-1]';
W=0;
s1=inf;
g=ones(3,1);
for w=0:0.001:1 %遍历权重
    B=[(w-1)*x1(1:n-1)-w*x1(2:n),ones(n-1,1)];
    Y=x0(2:n); 
    T=(B'*B)\B'*Y;   %拟合参数
    a=T(1);
    u=T(2);
    C1=(x0(1)-u/a)/(1-exp(a))+sum(x0(2:n).*exp(-a*R));
    C2=(1-exp(a))^(-2)+sum(exp(-2*a*R));
    C=C1/C2;
    S=(C/(1-exp(a))+u/a-x0(1))^2+sum((C*exp(-a*R)-x0(2:n)).^2);
    if S<s1
        s1=S;
        W=w;
        g(1)=a;
        g(2)=u;
        g(3)=C;
    end
end
yucezhi = g(3)*exp(-g(1)*[0:n-1+k])
%白化方程的离散响应
epsilon=x0(1:n)'-yucezhi(1:n)    %计算残差
delta=abs(epsilon./x0(1:n)')  %计算相对误差 
rho=1-(1-0.5*T(1))/(1+0.5*T(1))*lamda' %计算级比偏差值
t1=1998:2006;%时间自己修改
t2=1998:2006+k;%同上
plot(t1,x0,'bo--');
hold on
plot(t2,yucezhi,'go-')
hold on;
title('预测结果');
legend('真实值','预测值');

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值