MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 137|回复: 0|关注: 0

[未答复] 求问大神,用GM(1,n)模型预测未来的数值为什么会出现...

[复制链接]

新手

10 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
发表于 2017-10-12 21:30:22 | 显示全部楼层 |阅读模式

  X0=[203.71   393.41   546.91   859.57   1326.40  1652.55  2149.82
      10749.12 12649.05 15127.02 17334.36 20126.47 23804.40 29550.97
      8084.9   9336.4   12073.4  15853.7  18215.1  24584.5  32036.9 ];
  X0f=[2529.81 3706.28 3414.37
      29816.31 33367.39 29095.51
      31806.7 35348.4 35079.6];
if exist('X0')==0;
    disp('因本程序输入数据较多,请先查看程序帮助说明,按上述X0和X0f格式准备数据输入后,再执行本程序');
    break;
end;

[N n]=size(X0);

%生成全序列,由原始序列和预测期序列合成
if exist('X0f','var')==0;
    X0F=[X0];
else
    X0F=[X0 X0f];
end;

[N Fn]=size(X0F);

%计算全序列的1-AGO
for nn=1:N;
    for k=1:Fn;
        tmp=0;
        for j=1:k;
            tmp=tmp+X0F(nn,j);
        end;
        X1F(nn,k)=tmp;
    end;
end;

%对X1(1,1:n)作紧邻均值生产序列Z1
for i=2:n;
    Z1(i-1)=(X1F(1,i)+X1F(1,i-1))/2;
end;

B=ones(n-1,N);
Y=ones(n-1,1);

%求矩阵B和Y
for i=1:n-1;
    Y(i,1)=X0F(1,i+1);
    B(i,1)=-Z1(i);
    for nn=2:N;
        B(i,nn)=X1F(nn,i+1);
    end;
end;

%求a,b拟合值
a=inv(B'*B)*B'*Y;

%计算全序列系统特征数据模拟值
for k=1:Fn-1;
    tmp=0;
    for i=2:N;
        tmp=tmp+a(i)*X1F(i,k+1)/a(1);
    end;
    F1(k+1)=(X0F(1,1)-tmp)*exp(-a(1)*k)+tmp;
    F1(1)=X0F(1);
end;
for k=1:Fn-1;
    F0(k+1)=F1(k+1)-F1(k);
    F0(1)=X0(1,1);
end;

%计算初始序列模拟值残差和相对误差
A=zeros(N,5);
A(1,1)=1;
A(1,2)=X0F(1,1);
for k=2:n;
    A(k,1)=k;
    A(k,2)=X0F(1,k);
    A(k,3)=F0(k);
    A(k,4)=A(k,2)-A(k,3);
    A(k,5)=100*abs(A(k,4))/A(k,2);
end;

clc;

disp('输入的原始序列X0为:');
disp(X0);

if exist('X0f','var')~=0;
    disp('输入的因素预测序列X0F为:');
    disp(X0F(2:N,n+1:Fn));
else;
end;

disp('误差检验表为:');
disp('          序号      实际数据    模拟数据       残差       相对误差');
disp(A);

disp('后续预测数据为:');
disp(F0(n+1:Fn));


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表