文档详情

灰色预测模型matlab程序精确版.doc

发布:2018-05-19约3.92千字共6页下载文档
文本预览下载声明
%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
显示全部
相似文档