测试数%x=[1019,1088,1324,1408,1601];gm1(x);%二次拟合预测GM(1,1)模型functiongmcal=gm1(x)ifnargin==0x=[1019,1088,1324,1408,1601]endformatlonggsizex=length(x);%求数组长度k=0;fory1=xk=k+1;ifk>1x1(k)=x1(k-1)+x(k);%累加生成z1(k-1)=-0.5*(x1(k)+x1(k-1));%z1维数减1,用于计算Byn1(k-1)=x(k);elsex1(k)=x(k);endend%x1,z1,k,yn1sizez1=length(z1);%size(yn1);z2=z1';z3=ones(1,sizez1)';YN=yn1';%转置%YNB=[z2z3];au0=inv(B'*B)*B'*YN;au=au0';%B,au0,auafor=au(1);ufor=au(2);ua=au(2)./au(1);%afor,ufor,ua%输出预测的au和u/a的值constant1=x(1)-ua;afor1=-afor;x1t1='x1(t+1)';estr='exp';tstr='t';leftbra='(';rightbra=')';%constant1,afor1,x1t1,estr,tstr,leftbra,rightbrastrcat(x1t1,'=',num2str(constant1),estr,leftbra,num2str(afor1),tstr,rightbra,'+',leftbra,num2str(ua),rightbra)%输出时间响应方程U/*1*«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«J>»«Jx«X»«X»«Jx%二次拟合k2=0;fory2=x1k2=k2+1;ifk2>kelseze1(k2)=exp(-(k2-1)*afor);endend%ze1sizeze1=length(ze1);z4=ones(1,sizeze1)';G=[ze1'z4];X1=x1';au20=inv(G'*G)*G'*X1;au2=au20';%z4,X1,G,au20Aval=au2(1);Bval=au2(2);%Aval,Bval%输出预测的A,B的值strcat(x1t1,'=',num2str(Aval),estr,leftbra,num2str(afor1),tstr,rightbra,'+',leftbra,num2str(Bval),rightbra)%输出时间响应方程nfinal=sizexT+1;(其中+1可改为+5等其他数字,即可预测更多的数字)%决定预测的步骤数5这个步骤可以通过函数传入%nfinal=sizexd2-1+1;%预测的步骤数1fork3=1:nfinalx3fcast(k3)=constant1*exp(afor1*k3)+ua;end%x3fcast%一次拟合累加值fork31=nfinal:-1:0ifk31>1x31fcast(k31+1)=x3fcast(k31)-x3fcast(k31-1);elseifk31>0x31fcast(k31+1)=x3fcast(k31)-x(1);elsex31fcast(k31+1)=x(1);endendendx31fcast%一次拟合预测值fork4=1:nfinalx4fcast(k4)=Aval*exp(afor1*k4)+Bval;end%x4fcastfork41=nfinal:-1:0ifk41>1x41fcast(k41+1)=x4fcast(k41)-x4fcast(k41-1);elseifk41>0x41fcast(k41+1)=x4fcast(k41)-x(1);elsex41fcast(k41+1)=x(1);endendendx41fcast,x%二次拟合预测值%***精度检验pc************//////////////////////////////////k5=0;fory5=xk5=k5+1;ifk5>sizexelseerr1(k5)=x(k5)-x41fcast(k5);endend%err1%绝对误差xavg=mean(x);%xavg%x平均值err1avg=mean(err1);%err1avg%errl平均值k5=0;s1total=0;fory5=xk5=k5+1;ifk5>sizexelsesltotal=sltotal+(x(k5)-xavg)2endends1suqare=s1total./sizex;s1sqrt=sqrt(s1suqare);%s1suqare,s1sqrt%slsuqare残差数列x的方差slsqrt为x方差的平方根SIk5=0;s2total=0;fory5=xk5=k5+1;ifk5>sizexelses2total=s2total+(err1(k5)-errlavg)2endends2suqare=s2total./sizex;%s2suqare残差数列errl的方差S2Cval=sqrt(s2suqare./s1suqare);Cval%nnn=0.6745*s1sqrt%CvalC检验值k5=0;pnum=0;fory5=xk5=k5+1;ifabs(err1(k5)-err1avg)<0.6745*s1sqrtpnum=pnum+1;%ppp=abs(err1(k5)-err1avg)elseendendpval=pnum./sizex;pval%p检验值%arr1=x41fcast(1:6)x=%预测结果为区间范围预测步长和数据长度可调整程序参数进行改进运行结果x=10191088132414081601ans=x1(t+1)=8908.4929exp(0.11871t)+(-7889.4929)ans=x1(t+1)=8945.2933exp(0.11871t)+(-7935.7685)x31fcast=Columns1through31019Columns4through61423.80987235488x41fcast=Columns1through31019Columns4through61429.691537401951122.893478570971603.277582074421118.056854351291609.90061644041101910881324140816011264.431421783031805.366752325561269.654704920981812.824603777821Cval=0.139501578334155pval=