灰色预测法

来源:互联网 发布:云计算技术体系架构 编辑:程序博客网 时间:2024/04/30 00:13
  1. public class GM1_1   
  2. {   
  3.   private int T;//样本数量   
  4.   private int M;   
  5.   private double[] X;//原始数列   
  6.   private double[] XF;//预测值   
  7.   private double[] WC;//误差值   
  8.   private double[][] B; //B矩阵   
  9.   private double[][] YN; //YN矩阵   
  10.   private double[] X1;  //AGO结果   
  11.   private double a=0,u=0;//[a,u]T向量   
  12.   protected DataSet observedData = new DataSet();   
  13.   public GM1_1()   
  14.   {   
  15.   
  16.   }   
  17.    /**  
  18.    * 取预测类型  
  19.    * @return   
  20.    */  
  21.     public String getForecastType(){   
  22.     return "longshine.epdsm.forecase.GM1_1";   
  23.   }   
  24.   
  25.   /**  
  26.    * 取预测模型名称   
  27.    * @return   
  28.    */  
  29.     public String toString(){   
  30.     return "灰色模型GM(1,1)";   
  31.   }     
  32.   
  33.   /**  
  34.    * 取预测模型代码   
  35.    * @return   
  36.    */     
  37.     public String getForecastModelNo(){   
  38.     return "mypack.GM1_1";   
  39.   }     
  40.      
  41.     public double forecast( IDataPoint dataPoint ){   
  42.     int x= (int)Math.round(dataPoint.getIndependentValue("x"));   
  43.     Matrix M_YN;   
  44.     Matrix M_B;   
  45.     Matrix M_Reverse;   
  46.     try{   
  47.       M_YN= new Matrix(YN);   
  48.       M_B=new Matrix(B);     
  49.          
  50.       Matrix tmp=M_B.transpose().multiply(M_B).inverse();   
  51.         
  52.       //利用最小二乘法求a系数向量a~=(B'B)-1B'YN   
  53.       M_Reverse=GMUtils.getGrayModelModulus(M_B,M_YN);   
  54.       a=M_Reverse.getEntry(1,1);   
  55.       u=M_Reverse.getEntry(2,1);   
  56.     }catch(Exception e)   
  57.     {   
  58.       e.printStackTrace();   
  59.     }   
  60.     //开始预测   
  61.     try  
  62.     {   
  63.       XF[0]=X[0];   
  64.       for(int i=1;i<XF.length;i++)   
  65.       {   
  66.         XF[i]=GMUtils.getT1Time(a,u,X[0],i);   
  67.       }   
  68.          
  69.     }catch(Exception e)   
  70.     {   
  71.       e.printStackTrace();   
  72.     }   
  73.       
  74.     WC=GMUtils.getRelativeError(X,XF);   
  75.    if(x<T) return X[x];   
  76.     else  
  77.     {   
  78.       try  
  79.       {   
  80.         double res=GMUtils.getT1Time(a,u,X[0],x);   
  81.         return res;   
  82.       }catch(Exception e)   
  83.       {   
  84.         e.printStackTrace();   
  85.         return 0.;   
  86.       }   
  87.     }   
  88.   }   
  89.      
  90.   public void init( DataSet dataSet )   
  91.   {   
  92.     this.observedData = dataSet;   
  93.     setT(dataSet.size());   
  94.     X=new double[T];   
  95.     initX();   
  96.     setT(X.length);   
  97.     this.M=X.length-1;   
  98.     XF=new double[X.length];   
  99.     WC=new double[X.length];   
  100.     B=new double[M][2];   
  101.     YN=new double[M][1];       
  102.     X1=GMUtils.sumArray(X);   
  103.     a=0;u=0;       
  104.     //初始化B,Yn   
  105.     for(int i=0;i<M;i++)   
  106.     {   
  107.       B[i][0]=-(X1[i]+X1[i+1])/2;   
  108.       B[i][1]=1;   
  109.     }   
  110.     for(int i=0;i<M;i++)   
  111.     {   
  112.       YN[i][0]=X[i+1];   
  113.     }       
  114.   }   
  115.      
  116.   public int getM()   
  117.   {   
  118.     return this.M;   
  119.   }   
  120.   private void initX()  //X赋值   
  121.   {   
  122.     for (int i=1 ;i<=T ;i++ )    
  123.     {   
  124.       IDataPoint dp = (IDataPoint)observedData.get(i-1);   
  125.       X[i-1] =  dp.getDependentValue();   
  126.     }       
  127.   }   
  128.   
  129.   public int getT()   
  130.   {   
  131.     return T;   
  132.   }   
  133.   
  134.   public void setT(int T)   
  135.   {   
  136.     this.T = T;   
  137.   }   
  138.      
  139.   public static void main(String[] args)   
  140.   {   
  141.       
  142.     final double[] powers={   
  143. 124.8,   
  144. 110.7,   
  145. 129.0,   
  146. 155.3,   
  147. 219.03  
  148.     };   
  149.     DataSet dataset = new DataSet();   
  150.     IDataPoint dp;   
  151.     int  count = 1;   
  152.     for (int i=0 ;i<powers.length ;i++ )    
  153.     {   
  154.       dp = new Observation( powers[i] );   
  155.       dp.setIndependentValue( "x", i+1 );   
  156.       dp.setTitle("xxx");   
  157.       dataset.add( dp );   
  158.     };       
  159.     GM1_1  aa = new GM1_1();   
  160.     aa.init(dataset);   
  161.     dp = new Observation(0);   
  162.   
  163.     dp.setIndependentValue( "x"5);   
  164.     System.out.println("7="+aa.forecast(dp));   
  165.        
  166.     dp.setIndependentValue( "x"6);   
  167.     System.out.println("8="+aa.forecast(dp));   
  168.     dp.setIndependentValue( "x"7);   
  169.     System.out.println("9="+aa.forecast(dp));   
  170.     dp.setIndependentValue( "x"8);   
  171.     System.out.println("10="+aa.forecast(dp));   
  172.     dp.setIndependentValue( "x"9);   
  173.     System.out.println("11="+aa.forecast(dp));   
  174.   }   
  175.      
  176. }  
原创粉丝点击