/// <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); }
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); }