@Test
 public void test() {
   final int n = 20;
   final double[][] x = new double[n][5];
   final double[] y1 = new double[n];
   final double[] y2 = new double[n];
   final double[] a1 = new double[] {3.4, 1.2, -0.62, -0.44, 0.65};
   final double[] a2 = new double[] {0.98, 3.4, 1.2, -0.62, -0.44, 0.65};
   for (int i = 0; i < n; i++) {
     for (int j = 0; j < 5; j++) {
       x[i][j] = RANDOM.nextDouble() + (RANDOM.nextDouble() - 0.5) / FACTOR;
     }
     y1[i] =
         a1[0] * x[i][0]
             + a1[1] * x[i][1]
             + a1[2] * x[i][2]
             + a1[3] * x[i][3]
             + a1[4] * x[i][4]
             + RANDOM.nextDouble() / FACTOR;
     y2[i] =
         a2[0]
             + a2[1] * x[i][0]
             + a2[2] * x[i][1]
             + a2[3] * x[i][2]
             + a2[4] * x[i][3]
             + a2[5] * x[i][4]
             + RANDOM.nextDouble() / FACTOR;
   }
   final LeastSquaresRegressionResult result1 = REGRESSION.regress(x, null, y1, false);
   final LeastSquaresRegressionResult result2 = REGRESSION.regress(x, null, y2, true);
   assertRegression(result1, a1);
   assertRegression(result2, a2);
   final double[] residuals1 = result1.getResiduals();
   for (int i = 0; i < n; i++) {
     assertEquals(
         y1[i],
         a1[0] * x[i][0]
             + a1[1] * x[i][1]
             + a1[2] * x[i][2]
             + a1[3] * x[i][3]
             + a1[4] * x[i][4]
             + residuals1[i],
         10 * EPS);
   }
   final double[] residuals2 = result2.getResiduals();
   for (int i = 0; i < n; i++) {
     assertEquals(
         y2[i],
         a2[0]
             + a2[1] * x[i][0]
             + a2[2] * x[i][1]
             + a2[3] * x[i][2]
             + a2[4] * x[i][3]
             + a2[5] * x[i][4]
             + residuals2[i],
         10 * EPS);
   }
 }
 @Test
 public void test() {
   final double[] y = new double[N];
   final double[][] x = new double[N][3];
   for (int i = 0; i < N; i++) {
     y[i] = F2.evaluate(X[i]);
     for (int j = 1; j < 3; j++) {
       x[i][j] = X[i][j - 1];
     }
     x[i][0] = i % 2 == 0 ? -1. : 1.;
   }
   final LeastSquaresRegressionResult result = ADAPTIVE.regress(x, null, y, false);
   final double[] betas = result.getBetas();
   assertEquals(betas.length, 2);
   assertEquals(betas[0], BETA_2, EPS);
   assertEquals(betas[1], BETA_3, EPS);
 }