@Test
public void testSeveralFreeParameters() {
FiniteDifferencesDifferentiator differentiator =
new FiniteDifferencesDifferentiator(5, 0.001);
UnivariateDifferentiableFunction sine = new Sin();
UnivariateDifferentiableFunction f =
differentiator.differentiate(sine);
double[] expectedError = new double[] {
6.696e-16, 1.371e-12, 2.007e-8, 1.754e-5
};
double[] maxError = new double[expectedError.length];
for (double x = -2; x < 2; x += 0.1) {
for (double y = -2; y < 2; y += 0.1) {
DerivativeStructure dsX = new DerivativeStructure(2, maxError.length - 1, 0, x);
DerivativeStructure dsY = new DerivativeStructure(2, maxError.length - 1, 1, y);
DerivativeStructure dsT = dsX.multiply(3).subtract(dsY.multiply(2));
DerivativeStructure sRef = sine.value(dsT);
DerivativeStructure s = f.value(dsT);
for (int xOrder = 0; xOrder <= sRef.getOrder(); ++xOrder) {
for (int yOrder = 0; yOrder <= sRef.getOrder(); ++yOrder) {
if (xOrder + yOrder <= sRef.getOrder()) {
maxError[xOrder +yOrder] = FastMath.max(maxError[xOrder + yOrder],