24小时热门版块排行榜    

CyRhmU.jpeg
查看: 351  |  回复: 0

wodeai87

金虫 (正式写手)

[求助] 大家帮我看看这个代码错在哪里?(无偏灰色预测模型代码)万谢

function gm=GM(x0)  %灰色系统GM(1,1)预测
x0=[1.01 1.6387 2.7283 4.4717 7.3991 12.1725]'
T=input('T=');
x1=zeros(1,length(x0));
B=zeros(length(x0)-1,2);
yn=zeros(length(x0)-1,1);
hatx0=zeros(1,length(x0)+T);
hatx00=zeros(1,length(x0));
hatx1=zeros(1,length(x0)+T);
epsilon=zeros(length(x0),1);
omega=zeros(length(x0),1);
for i=1:length(x0)
    for j=1:i
        x1(i)=x1(i)+x0(j);%累加生成
    end
end
x1
for i=1:length(x0)-1
    B(i,1)=(-1/2)*(x1(i)+x1(i+1));
    B(i,2)=1;
    yn(i)=x0(i+1);
end
      hatA=(inv(B'*B))*B'*yn   %求a,u
      
for k=1:length(x0)+T
    hatx1(k)=(x0(1)-hatA(2)/hatA(1))*exp(-hatA(1)*(k-1))+hatA(2)/hatA(1);
end

hatA(1)=log((2-hatA(1))/(2+hatA(1)));
hatA(2)=2*hatA(2)/(2+hatA(1));
hatx0(1)=hatx1(1);
for k=2:length(x0)+T
    hatx0(k)=hatA(2)*exp(hatA(1)*(k-1));%累减还原
end
hatx0    %历史数据的模拟值
for i=1:length(x0)%开始检验
   epsilon(i)=x0(i)-hatx0(i);
   omega(i)=(epsilon(i)/x0(i))*100;
end
c=std(epsilon)/std(x0);
p=0;
for i=1:length(x0)
    if abs(epsilon(i)-mean(epsilon))<0.6745*std(x0)
        p=p+1;
    end
end
p=p/length(x0)
if p>0.95&c<0.35
    disp('预测精度好,预测值为:')
    disp(hatx0(length(x0)+T))
elseif p>0.85&c<0.5
    disp('预测精度合格,预测值为:')
    disp(hatx0(length(x0)+T))
  elseif p>0.70&c<0.65
    disp('预测精度勉强合格,预测值为:')
    disp(hatx0(length(x0)+T))
    elseif p<=0.7&c>0.65
    disp('预测精度不合格')
end
for i=1:length(x0)
    hatx00(i)=hatx0(i);
end
z=1:length(x0);
plot(z,x0,'-',z,hatx00,':')
text(2,x0(2),'历史数据:实线')
text(length(x0)/2,hatx00(length(x0))/2,'模拟数据:虚线')
end
本人菜鸟,实在找不到错误,还希望了解的人帮忙!!!

» 猜你喜欢

One day someone will walk into your life,then you realize love was always worth waiting for.
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 wodeai87 的主题更新
信息提示
请填处理意见