Esempio n. 1
0
        /// <summary>
        /// 二阶线性回归预测结果
        /// </summary>
        public double[] SecResult()
        {
            double[,] X = new double[length, 3];
            double[] B = new double[3];
            for (int i = 0; i < length; i++)
            {
                X[i, 0] = 1;
                X[i, 1] = x1[i];
                X[i, 2] = x2[i];
            }

            Matrix matr1 = new Matrix(X);
            Matrix matr2 = new Matrix(length, 1, y);
            Matrix A1    = new Matrix(3, 3, matr1.Transpose() * matr1);
            Matrix A2    = new Matrix(3, length, A1.InvertGaussJordan() * matr1.Transpose());
            Matrix A     = A2 * matr2;

            B[0] = A.GetElement(0, 0);
            B[1] = A.GetElement(1, 0);
            B[2] = A.GetElement(2, 0);

            Res = new double[length + n];
            for (int i = 0; i < length + n; i++)
            {
                Res[i] = B[0] + B[1] * x1[i] + B[2] * x2[i];
            }
            return(Res);
        }
Esempio n. 2
0
        public double[] Result()
        {
            this.AGO1();
            double[,] B = new double[length - 1, 2];
            double[] Yn = new double[length - 1];
            X1 = new double[length + n];   //预测的AGO1数列,分配内存
            X  = new double[length + n];   //预测的结果,分配内存


            for (int i = 0; i < length - 1; i++)
            {
                B[i, 0] = -(x1[i] + x1[i + 1]) / 2;
                B[i, 1] = 1;
            }
            //return B;
            for (int i = 1; i < length; i++)
            {
                Yn[i - 1] = x[i];
            }
            //return Yn;
            Matrix matr1 = new Matrix(B);
            Matrix matr2 = new Matrix(length - 1, 1, Yn);
            Matrix A1    = new Matrix(2, 2, matr1.Transpose() * matr1);
            Matrix A2    = new Matrix(2, length - 1, A1.InvertGaussJordan() * matr1.Transpose());
            Matrix A     = A2 * matr2;
            double a     = A.GetElement(0, 0);
            double u     = A.GetElement(1, 0);

            X1[0] = x[0];
            for (int i = 0; i < (length + n - 1); i++)
            {
                X1[i + 1] = (x[0] - u / a) * Math.Pow(Math.E, -a * (i + 1)) + u / a;
            }
            X[0] = x[0];
            for (int i = length + n - 1; i > 0; i--)
            {
                X[i] = X1[i] - X1[i - 1];
            }
            return(X);
        }