24小时热门版块排行榜    

查看: 541  |  回复: 1

OlivarD

新虫 (初入文坛)

[求助] GM(1,1)的matlab程序

1. 这个程序只能运行一次,第二次就会出现维度不对的问题,改了很多遍也都这样,不知道怎么改才能让他正常运行
2. GM(1,1)的a,b这里没有输出,本人菜鸟一枚,不知道应该怎么编写这个程序,还望大神指点一二
3. 以上每一步计算出来的数据如果输出保存
很急,谢谢各位了~

h=xlsread('Microsoft.xlsx');%数据保存在excel里面调用
global k;
for k=1:1:1254 %一行一行的计算
y=[h(k,: )];
n=length(y);
yy=ones(n,1);
yy(1)=y(1);
clear
for i=2:n
    yy(i)=yy(i-1)+y(i);
end
B=ones(n-1,2);
for i=1: (n-1)
    B(i,1)=-(yy(i)+yy(i+1))/2;
    B(i,2)=1;
end
BT=B';
for j=1:n-1
    YN(j)=y(j+1);
end
YN=YN';
A=inv(BT*B)*BT*YN; %出错的地方
a=A(1);
u=A(2);
t=u/a;
t_test=1;
i=1:t_test+n;
yys(i+1)=(y(1)-t).*exp(-a.*i)+t;
yys(1)=y(1);
for j=n+t_test:-1:2
    ys(j)=yys(j)-yys(j-1);
end
x=1:n;
xs=2:n+t_test;
yn=ys(2:n+t_test);
det=0;
for i=2:n
    det=det+abs(yn(i)-y(i));
end
det=det/(n-1);
disp(['百分绝对误差为:',num2str(det),'%']);
disp(['预测值为: ',num2str(ys(n+1:n+t_test))]);
end

[ Last edited by OlivarD on 2013-5-12 at 01:41 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

meatball1982

铜虫 (小有名气)

【答案】应助回帖

★ ★
1592203609: 金币+2, 应助指数+1, 谢谢参与 2013-05-16 12:05:58
1.把数据发上来,给你试试,如果不方便,就把数据减少。发上来。
至少把出错信息给出。

2.如果没错的话,a,u就是你想要的a,b.
a=A(1);
u=A(2);

3.用save 命令,存成mat文件,保存你的变量。你没说明白每一步你要保存什么。
唉。还是学吧。
2楼2013-05-15 14:59:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 OlivarD 的主题更新
信息提示
请填处理意见