灰色预测模型matlab程序精确版.doc
文本预览下载声明
%x=[1019,1088,1324,1408,1601];gm1(x); 测试数据
%二次拟合预测GM(1,1)模型
function gmcal=gm1(x)
if nargin==0
x=[1019,1088,1324,1408,1601]
end
format long g
sizex=length(x);
%求数组长度
k=0;
for y1=x
k=k+1;
if k1
x1(k)=x1(k-1)+x(k);
%累加生成
z1(k-1)=-0.5*(x1(k)+x1(k-1));
%z1维数减1,用于计算B
yn1(k-1)=x(k);
else
x1(k)=x(k);
end
end
%x1,z1,k,yn1
sizez1=length(z1);
%size(yn1);
z2 = z1;
z3 = ones(1,sizez1);
YN = yn1; %转置
%YN
B=[z2 z3];
au0=inv(B*B)*B*YN;
au = au0;
%B,au0,au
afor = au(1);
ufor = au(2);
ua = au(2)./au(1);
%afor,ufor,ua
%输出预测的 a u 和 u/a的值
constant1 = x(1)-ua;
afor1 = -afor;
x1t1 = x1(t+1);
estr = exp;
tstr = t;
leftbra = (;
rightbra = );
%constant1,afor1,x1t1,estr,tstr,leftbra,rightbra
strcat(x1t1,=,num2str(constant1),estr,leftbra,num2str(afor1),tstr,rightbra,+,leftbra,num2str(ua),rightbra)
%输出时间响应方程
%******************************************************
%二次拟合
k2 = 0;
for y2 = x1
k2 = k2 + 1;
if k2 k
else
ze1(k2) = exp(-(k2-1)*afor);
end
end
%ze1
sizeze1=length(ze1);
z4 = ones(1,sizeze1);
G=[ze1 z4];
X1 = x1;
au20=inv(G*G)*G*X1;
au2 = au20;
%z4,X1,G,au20
Aval = au2(1);
Bval = au2(2);
%Aval,Bval
%输出预测的 A,B的值
strcat(x1t1,=,num2str(Aval),estr,leftbra,num2str(afor1),tstr,rightbra,+,leftbra,num2str(Bval),rightbra)
%输出时间响应方程
nfinal = sizex-1 + 1;(其中+1可改为+5等其他数字,即可预测更多的数字)
%决定预测的步骤数5 这个步骤可以通过函数传入
%nfinal = sizexd2 - 1 + 1;
%预测的步骤数 1
for k3=1:nfinal
x3fcast(k3) = constant1*exp(afor1*k3)+ua;
end
%x3fcast
%一次拟合累加值
for k31=nfinal:-1:0
if k311
x31fcast(k31+1) = x3fcast(k31)-x3fcast(k31-1);
else
if k310
x31fcast(k31+1) = x3fcast(k31)-x(1);
else
x31fcast(k31+1) = x(1);
end
end
end
x31fcast
%一次拟合预测值
for k4=1:nfinal
x4fcast(k4) = Aval*exp(afor1*k4)+Bval;
end
%x4fcast
for k41=nfinal:-1:0
if k411
x41fcast(k41+1) = x4fcast(k41)-x4fcast(k41-1);
else
if k410
x41fcast(k41+1) = x4fc
显示全部