| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 921 人关注过本帖
标题:用matlab建立gm(1,1)模型
取消只看楼主 加入收藏
zhengjiaen
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-4-13
收藏
 问题点数:0 回复次数:0 
用matlab建立gm(1,1)模型
用10448,10988 ,11267,11322, 9497,10519 ,11828 ,11826,11148, 11229,12824,12889,11758预测下一个值。如果没有用gm残差修正模型,预测结果误差较大。要进行残差修正,用matlab代码怎么写。谢谢。还没改进的代码如下:
function yc0=GM1(x0,N)
n=length(x0);
for i=1:n
x1(i)=sum(x0(1:i));
end

for k=2:n % 紧邻均生成 z
% z(k)=0.5*x1(k)+0.5*x1(k-1);
z(k)=((x1(k)-x1(k-1))/(log2(x1(k))-log2(x1(k-1))))*log2(exp(1));
end

% for i=1:n-1
% b(i,1)=-z(i+1);
% y(i)=x0(i+1);
% end
% b(:,2)=1;
b(:,1)=-z(2:n)';
b(:,2)=1;
y=x0(2:n);
y=y'; % 转置为列向量
au=b\y; % 作矩阵除法,计算a u

yc1(1)=x0(1);
d=(1-exp(-n*au(1)))/(1-exp(-au(1)));
c=(sum(x1)+(d-n)*au(2)/au(1))/d;
for k=1:n+N-1
% c=x0(1)-au(2)/au(1);
yc1(k+1)=(c-au(2)/au(1))*exp( -au(1)*k)+au(2)/au(1);
end

yc0(1)=x0(1);
% for k=1:n+N-1
% yc0(k+1)=yc1(k+1)-yc1(k);
% end
yc0(2:n+N)=yc1(2:n+N)-yc1(1:n+N-1);
% disp(uint16(yc0(2:1:n+1)));

% for k=1:n
% e0(k)=x0(k)-yc0(k);
% end
e0=x0(1:n)-yc0(1:n);

max1=max(abs(e0));
r=1;
for k=2:n
r=r+0.5*max1/(abs(e0(k))+0.5*max1);
end
r=r/n; % r 表示关联度

pe=mean(e0);
% px0=sum(x0)/n;
% z=x0-px0;
% S1=sqrt(sum(z.^2)/n);
% z=e0-pe;
% S2=sqrt(sum(z.^2)/n);
% C=S2/S1
c= std(e0)./std(x0)
p=length(find(abs(e0-pe)<0.6745*std(x0)))/n;
if p>0.95&c<0.35
disp (' 预测精度好');
else if p>0.8&c<0.5
disp (' 预测合格');
else if p>0.7&c<0.65
disp (' 预测勉强合格');
    else disp (' 预测不合格');
end
end
end
怎么进行残差修正啊
搜索更多相关主题的帖子: function 
2011-04-13 11:04
快速回复:用matlab建立gm(1,1)模型
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016259 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved