gm 1 1 模型 软件 gm 1 1 模型
摘要:灰色系统预测GM(1,1)模型的MATLAB源代码function GM1_1(X0)%format long ;[m,n]=size(X0); X1=cumsum(X0); %累加 X2=[];fo...
发布日期:2020-11-17灰色系统预测GM(1,1)模型的MATLAB源代码
function GM1_1(X0)%format long ;[m,n]=size(X0); X1=cumsum(X0); %累加 X2=[];for i=1:n-1 X2(i,:)=X1(i)+X1(i+1);endB=-0.5.*X2 ;t=ones(n-1,1);B=[B,t] ; % 求B矩阵YN=X0(2:end) ;P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验, %序列x0的光滑比P(t)=X0(t)/X1(t-1)A=inv(B."*B)*B."*YN." ;a=A(1) u=A(2) c=u/a ;b=X0(1)-c ; X=[num2str(b),"exp","(",num2str(-a),"k",")",num2str(c)]; strcat("X(k+1)=",X) %syms k; for t=1:length(X0) k(1,t)=t-1; end kY_k_1=b*exp(-a*k)+c;for j=1:length(k)-1 Y(1,j)=Y_k_1(j+1)-Y_k_1(j);endXY=[Y_k_1(1),Y] %预测值CA=abs(XY-X0) ; %残差数列Theta=CA %残差检验 绝对误差序列XD_Theta= CA ./ X0 %残差检验 相对误差序列AV=mean(CA); % 残差数列平均值R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5R=sum(R_k)/length(R_k) %关联度Temp0=(CA-AV).^2 ;Temp1=sum(Temp0)/length(CA);S2=sqrt(Temp1) ; %绝对误差序列的标准差%----------AV_0=mean(X0); % 原始序列平均值Temp_0=(X0-AV_0).^2 ;Temp_1=sum(Temp_0)/length(CA);S1=sqrt(Temp_1) ; %原始序列的标准差TempC=S2/S1*100; %方差比C=strcat(num2str(TempC),"%") %后验差检验 %方差比 %----------SS=0.675*S1 ;Delta=abs(CA-AV) ;TempN=find(Delta<=SS);N1=length(TempN);N2=length(CA);TempP=N1/N2*100;P=strcat(num2str(TempP),"%") %后验差检验 %计算小误差概率 调用例子:X0=[2.874,3.278,3.337,3.39,3.679];GM1_1(X0)
灰色系统预测GM(1,1)模型的MATLAB详细源代码
%%%%%%%%%%%%%%%%把下面函数保存为gmcal.m文件%%%%%%%%%%%function gmcal=gm1(x)sizexd2 = size(x,2);%求数组长度k=0;for y1=x k=k+1; if k>1 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); endend%x1,z1,k,yn1sizez1=size(z1,2);%size(yn1);z2 = z1";z3 = ones(1,sizez1)";YN = yn1"; %转置%YNB=[z2 z3];au0=inv(B"*B)*B"*YN;au = au0";%B,au0,auafor = 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,rightbrastrcat(x1t1,"=",num2str(constant1),estr,leftbra,num2str(afor1),tstr,rightbra,"+",leftbra,num2str(ua),rightbra)%输出时间响应方程,也就是最终要求的灰色模型%%%%%%%%%%%%%%%%%%%%%在workspace里输入%%%%%%%%%%%%x =[5999,5903,5848,5700,7884];gm1(x)%其中5999,5903,5848,5700,7884可以换成已知的历史数据,无论几个都可以。
...
SPSS软件中如何实现GM(1,1)模型,搜索相关资料都说可以实现,但...
clear;clc;X0=[128453 129227 130765 129988 131448 132129 132802 133450 134091 135404];pre_num=5; %预测5年%% 级比检验n=length(X0);Xle=exp(-2/(n+1));Xre=exp(2/(n+1));lambda=X0(1:end-1)./X0(2:end);range=minmax(lambda);if range(2)Xle disp("所有的级比都落在可容覆盖区间,可以建立GM模型")else disp("没有通过级比检验")end%% 建模GM(1,1)X1=cumsum(X0);Z1=0.5*(X1(2:end)+X1(1:end-1));Y=X0(2:end)";B=[-Z1(1:end)" ones(n-1,1)];u=B\Y; %u=inv(B"*B)*B"*Ya=u(1);b=u(2);%% 输出结果Xpre=[X0(1) ones(1,n-1+pre_num)];for k=1:n-1+pre_num Xpre(k+1)=(X0(1)-b/a)*(exp(-a*k)-exp(-a*(k-1)));enderr=X0-Xpre(1:n); %计算残差epsilon=abs(err)./X0*100; %计算相对误差rho=1-(1-0.5*a)/(1+0.5*a)*lambda; %计算级比偏差值%% 画图t1=2002:2011;t2=2002:2011+pre_num;plot(t1,X0,"o",t2,Xpre,"r","LineWidth",2)xlabel("年份")ylabel("人口")legend("原始数据","预测数据", "Location","SouthEast")...