GM

    GM0.m  
    %该函数为GM(11)模型返回还原值   
    function f=GM0(x0,t)  %数据数列   
    [M,N]=size(x0);        %算出数据数列的大小   
    x1(1)=x0(1);           %累加生成数列   
    for i=2:N;       
        x1(i)=x1(i-1)+x0(i);   
    end  
    x2=[];              %累加生成数列均值生成数列   
    for j=1:(N-1);       
        x2(j)=(x1(j)+x1(j+1))/2;   
    end  
    x=x0;              %数据数列镜像  
    x(1)=[];           %删除第一个数据   
    Y=x';              %数据列向量   
    global a;   
    global b;   
    B(:,1)=-x2';  
    B(:,2)=1;   
    A=inv(B'*B)*B'*Y;   %求参量a,b组成的参数向量   
    a=A(1,1);           %求参数a   
    b=A(2,1);           %求参数b    
    f=(1-exp(a))*(x0(1)-b/a)*exp(-a*(t-1));  
    f  
      
    GM1.m:  
    %该函数为GM(11)模型中数据数列进行光滑比检验   
    function f=GM1(x0)   %数据数列   
    N=max(size(x0));       %算出数据数列的大小    
    x1=cumsum(x0);         %累加生成数列   
    global J;   
    global J1;  
    global J2;   
    x0(1)=[];   
    x1(N)=[];   
    global r;  
    r=x0./x1;    
    for j=2:(N-1);           %判断数据数列是否满足准光滑条件1     
       if(r(j)>=0.5||r(j)<0)           
           J1=0;           
           break;       
       else  
           J1=1;       
       end  
    end  
    for l=1:(N-2);           %判断数据数列是否满足准光滑条件2       
        if((r(l+1)/r(l))>=1)           
            J2=0;           
            break;       
        else  
            J2=1;       
        end  
    end  
    J=J1+J2;    
    if(J==2)                 %判断数据数列是否为准光滑数列       
        disp('数据为准光滑数列')  
    else  
        disp('数据不是准光滑数列')   
    end  
      
    GM2.m  
    %该函数为GM(11)模型还原值参数计算   
    function f=GM2(x0)  %数据数列  
    [M,N]=size(x0);      %算出数据数列的大小    
    x1(1)=x0(1);         %累加生成数列   
    for i=2:N;        
        x1(i)=x1(i-1)+x0(i);   
    end  
    x2=[];              %累加生成数列均值生成数列   
    for j=1:(N-1);        
        x2(j)=(x1(j)+x1(j+1))/2;  
    end  
      x=x0;              %数据数列镜像        
      x(1)=[];           %删除第一个数据   
      Y=x';              %数据列向量   
      global a;   
      global b;   
      B(:,1)=-x2';   
      B(:,2)=1;    
      A=inv(B'*B)*B'*Y;   %求参量a,b组成的参数向量   
      a=A(1,1);           %求参数a   
      disp('参数a为:')   
      a   
      b=A(2,1);           %求参数b   
      disp('参数b为:')   
      b  
      
    GM3.m  
    %该程序实现G(1,1)模型的精度检验   
    %包括平均相对误差,绝对关联度,均方差比值,小误差概率检验  
    function f=GM3(x0)   
    N=max(size(x0));   
    x=GM0(x0,1:N);  %利用已有程序GM2得出数据列模型估计值   
    x(1)=x0(1);     %更正第一个估计值   
    disp('模型模拟估计值为')   
    x   
    A=x-x0;         %计算绝对残差序列   
    disp('模型估计值绝对残差序列为:')  
    A   
    G=abs(A);   
    Amin=min(G);    %计算最小绝对值绝对残差   
    Amax=max(G);    %计算最大绝对值绝对残差   
    B=A./x0;        %计算相对误差序列   
    disp('模型估计值相对误差序列为:')   
    B    
    P=sum(abs(B))/N;     %计算平均相对误差   
    disp('模型估计值平均相对误差为:')  
    P    
    for i=1:1:N       %通过循环计算关联系数序列       
        D(i)=(Amin+0.5*Amax)/(G(i)+0.5*Amax);   
    end  
    R=sum(D)/N;    
    disp('关联度为:')   
    R    
    x_=sum(x0)/N;    %计算数据的均值    
    S1=(sum((x0-x_).^2)/(N-1))^0.5;   %计算数据序列方均差  
    A_=sum(A)/N;     %计算残差平均值    
    S2=(sum((A-A_).^2)/(N-1))^0.5;    %计算残差序列方均差  
    C=S2/S1;         %计算方均差比值   
    disp('均方差比值为:')   
    C    
    S0=0.6745*S1;  
    E=A-A_;   
    F=find(E<S0);   
    M=max(size(F)); %计算小残差个数  
    p=M/N;          %计算小误差概率   
    disp('小误差概率为:')  
    p  

 

posted on 2017-07-19 00:40  浮影丶  阅读(526)  评论(0编辑  收藏  举报