灰色预测法
来源:互联网 发布:云计算技术体系架构 编辑:程序博客网 时间:2024/04/30 00:13
- public class GM1_1
- {
- private int T;
- private int M;
- private double[] X;
- private double[] XF;
- private double[] WC;
- private double[][] B;
- private double[][] YN;
- private double[] X1;
- private double a=0,u=0;
- protected DataSet observedData = new DataSet();
- public GM1_1()
- {
-
- }
-
-
-
-
- public String getForecastType(){
- return "longshine.epdsm.forecase.GM1_1";
- }
-
-
-
-
-
- public String toString(){
- return "灰色模型GM(1,1)";
- }
-
-
-
-
-
- public String getForecastModelNo(){
- return "mypack.GM1_1";
- }
-
- public double forecast( IDataPoint dataPoint ){
- int x= (int)Math.round(dataPoint.getIndependentValue("x"));
- Matrix M_YN;
- Matrix M_B;
- Matrix M_Reverse;
- try{
- M_YN= new Matrix(YN);
- M_B=new Matrix(B);
-
- Matrix tmp=M_B.transpose().multiply(M_B).inverse();
-
-
- M_Reverse=GMUtils.getGrayModelModulus(M_B,M_YN);
- a=M_Reverse.getEntry(1,1);
- u=M_Reverse.getEntry(2,1);
- }catch(Exception e)
- {
- e.printStackTrace();
- }
-
- try
- {
- XF[0]=X[0];
- for(int i=1;i<XF.length;i++)
- {
- XF[i]=GMUtils.getT1Time(a,u,X[0],i);
- }
-
- }catch(Exception e)
- {
- e.printStackTrace();
- }
-
- WC=GMUtils.getRelativeError(X,XF);
- if(x<T) return X[x];
- else
- {
- try
- {
- double res=GMUtils.getT1Time(a,u,X[0],x);
- return res;
- }catch(Exception e)
- {
- e.printStackTrace();
- return 0.;
- }
- }
- }
-
- public void init( DataSet dataSet )
- {
- this.observedData = dataSet;
- setT(dataSet.size());
- X=new double[T];
- initX();
- setT(X.length);
- this.M=X.length-1;
- XF=new double[X.length];
- WC=new double[X.length];
- B=new double[M][2];
- YN=new double[M][1];
- X1=GMUtils.sumArray(X);
- a=0;u=0;
-
- for(int i=0;i<M;i++)
- {
- B[i][0]=-(X1[i]+X1[i+1])/2;
- B[i][1]=1;
- }
- for(int i=0;i<M;i++)
- {
- YN[i][0]=X[i+1];
- }
- }
-
- public int getM()
- {
- return this.M;
- }
- private void initX()
- {
- for (int i=1 ;i<=T ;i++ )
- {
- IDataPoint dp = (IDataPoint)observedData.get(i-1);
- X[i-1] = dp.getDependentValue();
- }
- }
-
- public int getT()
- {
- return T;
- }
-
- public void setT(int T)
- {
- this.T = T;
- }
-
- public static void main(String[] args)
- {
-
- final double[] powers={
- 124.8,
- 110.7,
- 129.0,
- 155.3,
- 219.03
- };
- DataSet dataset = new DataSet();
- IDataPoint dp;
- int count = 1;
- for (int i=0 ;i<powers.length ;i++ )
- {
- dp = new Observation( powers[i] );
- dp.setIndependentValue( "x", i+1 );
- dp.setTitle("xxx");
- dataset.add( dp );
- };
- GM1_1 aa = new GM1_1();
- aa.init(dataset);
- dp = new Observation(0);
-
- dp.setIndependentValue( "x", 5);
- System.out.println("7="+aa.forecast(dp));
-
- dp.setIndependentValue( "x", 6);
- System.out.println("8="+aa.forecast(dp));
- dp.setIndependentValue( "x", 7);
- System.out.println("9="+aa.forecast(dp));
- dp.setIndependentValue( "x", 8);
- System.out.println("10="+aa.forecast(dp));
- dp.setIndependentValue( "x", 9);
- System.out.println("11="+aa.forecast(dp));
- }
-
- }