public void testBSplineFit() {
final GeneralizedLeastSquare gls = new GeneralizedLeastSquare();
final LeastSquareResults results = gls.solve(X, Y, SIGMA, BASIS_FUNCTIONS);
final Function<Double, Double> spline =
new BasisFunctionAggregation<>(BASIS_FUNCTIONS, results.getFitParameters().toArray());
assertEquals(0.0, results.getChiSq(), 1e-12);
assertEquals(-0.023605293, spline.apply(0.5), 1e-8);
if (PRINT) {
System.out.println("Chi^2:\t" + results.getChiSq());
System.out.println("weights:\t" + results.getFitParameters());
for (int i = 0; i < 101; i++) {
final double x = 0 + i * 2.0 / 100.0;
System.out.println(x + "\t" + spline.apply(x));
}
for (int i = 0; i < X.length; i++) {
System.out.println(X[i] + "\t" + Y[i]);
}
}
}