MATLAB程序:灰色模型求解
%u是包含a、b值的参数矩阵;ago是预测后累加值矩阵;varl是还原预测值矩阵;error是残差矩阵;c是后验差比值 clear
clc %清屏,以使结果独立显示 format long; %设置计算精度
x=[4771.17 5210.12 5741.03 6694.23 8072.83 9164.1 10366.37 12188.85 13698.15 14900.93]; if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换 x=x'; end
n=length(x); %取输入数据的样本量 z=0;
for i=1:n %计算累加值,并将值赋予矩阵be z=z+x(i,:); be(i,:)=z; end
for i=2:n %对原始数列平行移位 y(i-1,:)=x(i,:); end
for i=1:n-1 %计算数据矩阵B的第一列数据 c(i,:)=-0.5*(be(i,:)+be(i+1,:)); end
for j=1:n-1 %计算数据矩阵B的第二列数据 e(j,:)=1; end
for i=1:n-1 %构造数据矩阵B B(i,1)=c(i,:); B(i,2)=e(i,:); end
u=inv(B'*B)*B'*y; %计算参数 矩阵
for i=1:n+1 %计算数据估计值的累加数列,如改为n+1为n+m可预测后m-1个值 ago(i,:)=(x(1,:)-u(2,:)/u(1,:))*exp(-u(1,:)*(i-1))+u(2,:)/u(1,:); end
varl(1,:)=ago(1,:);
for i=1:n %如改n为n+m-1,可预测后m-1个值
varl(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下一预测值 end for i=1:n
error(i,:)=varl(i,:)-x(i,:); %计算残差 e(i,:)=error(i,:)/x(i,:); %计算相对误差 end
c=std(error)/std(x); %调用统计工具箱的标准差函数计算后验差的比值c varl,c,s1=std(x),s2=std(error)
16
相关推荐: