@Test public void firstDerivativeTest() { double a = 1.0; double b = 1.5; double c = -0.5; double[] x = new double[] {0., 2., 5.}; int n = x.length; double[] y = new double[n]; for (int i = 0; i < n; i++) { y[i] = a + b * x[i] + c * x[i] * x[i]; } Interpolator1D interpolator = new NaturalCubicSplineInterpolator1D(); Interpolator1DDataBundle db = interpolator.getDataBundle(x, y); Double grad = interpolator.firstDerivative(db, x[n - 1]); Function1D<Double, Double> func = interpolator.getFunction(db); ScalarFirstOrderDifferentiator diff = new ScalarFirstOrderDifferentiator(); Function1D<Double, Boolean> domain = new Function1D<Double, Boolean>() { @Override public Boolean evaluate(Double x) { return x <= 5.0; } }; Function1D<Double, Double> gradFunc = diff.differentiate(func, domain); assertEquals(gradFunc.evaluate(x[n - 1]), grad, 1e-8); }
@Override public double firstDerivative(final Interpolator1DDataBundle data, final Double value) { return _transform.inverseTransformGradient(_base.interpolate(data, value)) * _base.firstDerivative(data, value); }
@Override public double firstDerivative( Interpolator1DDataBundle data, Double value, Interpolator1D interpolator) { JodaBeanUtils.notNull(data, "data"); return interpolator.firstDerivative(data, value); }