@Override public double applyAsDouble(double x) { return (DoubleFunction1D.this.applyAsDouble(x + eps) - DoubleFunction1D.this.applyAsDouble(x - eps)) / 2 / eps; }
@Override public double applyAsDouble(double x) { return (DoubleFunction1D.this.applyAsDouble(x + eps) - DoubleFunction1D.this.applyAsDouble(x)) / eps; }
@Override public double applyAsDouble(double x) { return DoubleFunction1D.this.applyAsDouble(x) / f.applyAsDouble(x); }
@Override public double applyAsDouble(double x) { return DoubleFunction1D.this.applyAsDouble(x) * f.applyAsDouble(x); }
@Override public double applyAsDouble(double x) { return DoubleFunction1D.this.applyAsDouble(x) * a; }
@Override public double applyAsDouble(double x) { return DoubleFunction1D.this.applyAsDouble(x) - f.applyAsDouble(x); }
@Override public double applyAsDouble(double x) { return (DoubleFunction1D.this.applyAsDouble(x) - DoubleFunction1D.this.applyAsDouble(x - eps)) / eps; }
@Override public double applyAsDouble(double x) { return DoubleFunction1D.this.applyAsDouble(x) + f.applyAsDouble(x); }
@Override public double applyAsDouble(double x) { return DoubleFunction1D.this.applyAsDouble(x) + a; }
@Override public double applyAsDouble(double x) { return DoubleFunction1D.this.applyAsDouble(x) - a; }
@Override public double applyAsDouble(double x) { return DoubleFunction1D.this.applyAsDouble(x) / a; }
@Test public void testDivide() { assertEquals(F1.divide(F2).applyAsDouble(X), F1.applyAsDouble(X) / F2.applyAsDouble(X), EPS); assertEquals(F1.divide(A).applyAsDouble(X), F1.applyAsDouble(X) / A, EPS); }
@Test public void testMultiply() { assertEquals(F1.multiply(F2).applyAsDouble(X), F1.applyAsDouble(X) * F2.applyAsDouble(X), EPS); assertEquals(F1.multiply(A).applyAsDouble(X), F1.applyAsDouble(X) * A, EPS); }
@Test public void testAdd() { assertEquals(F1.add(F2).applyAsDouble(X), F1.applyAsDouble(X) + F2.applyAsDouble(X), EPS); assertEquals(F1.add(A).applyAsDouble(X), F1.applyAsDouble(X) + A, EPS); }
@Test public void testSubtract() { assertEquals(F1.subtract(F2).applyAsDouble(X), F1.applyAsDouble(X) - F2.applyAsDouble(X), EPS); assertEquals(F1.subtract(A).applyAsDouble(X), F1.applyAsDouble(X) - A, EPS); }
@Test public void testDerivative() { assertEquals(F1.derivative().applyAsDouble(X), DF1.applyAsDouble(X), 1e-3); assertEquals(F2.derivative().applyAsDouble(X), DF2.applyAsDouble(X), 1e-3); assertEquals(F1.derivative(FiniteDifferenceType.CENTRAL, 1e-5).applyAsDouble(X), DF1.applyAsDouble(X), 1e-3); assertEquals(F2.derivative(FiniteDifferenceType.CENTRAL, 1e-5).applyAsDouble(X), DF2.applyAsDouble(X), 1e-3); assertEquals(F1.derivative(FiniteDifferenceType.FORWARD, 1e-5).applyAsDouble(X), DF1.applyAsDouble(X), 1e-3); assertEquals(F2.derivative(FiniteDifferenceType.FORWARD, 1e-5).applyAsDouble(X), DF2.applyAsDouble(X), 1e-3); assertEquals(F1.derivative(FiniteDifferenceType.BACKWARD, 1e-5).applyAsDouble(X), DF1.applyAsDouble(X), 1e-3); assertEquals(F2.derivative(FiniteDifferenceType.BACKWARD, 1e-5).applyAsDouble(X), DF2.applyAsDouble(X), 1e-3); assertEquals(F3.derivative().applyAsDouble(X), DF1.applyAsDouble(X), 1e-15); assertEquals(F4.derivative().applyAsDouble(X), DF2.applyAsDouble(X), 1e-15); }
@Test public void testConversion() { final Function<Double, Double> f1 = x -> x * x * x + 2 * x * x - 7 * x + 12; final DoubleFunction1D f2 = DoubleFunction1D.from(f1); for (int i = 0; i < 100; i++) { final double x = Math.random(); assertEquals(f2.applyAsDouble(x), F1.applyAsDouble(x), 0); assertEquals(f2.derivative().applyAsDouble(x), F1.derivative().applyAsDouble(x), 0); } } }
@Test public void testEvaluate() { final double x = RANDOM.nextDouble(); assertEquals(C[3] * Math.pow(x, 3) + C[2] * Math.pow(x, 2) + C[1] * x + C[0], F.applyAsDouble(x), EPS); }
@Test public void test() { final int n = 15; final DoubleFunction1D[] f1 = HERMITE.getPolynomials(n); final DoubleFunction1D[] f2 = ORTHONORMAL.getPolynomials(n); final double x = 3.4; for (int i = 0; i < f1.length; i++) { assertEquals( f1[i].applyAsDouble(x) / Math.sqrt(CombinatoricsUtils.factorialDouble(i) * Math.pow(2, i) * Math.sqrt(Math.PI)), f2[i].applyAsDouble(x), EPS); } }
@Test public void testDerivative() { final double x = RANDOM.nextDouble(); assertEquals(3 * C[3] * Math.pow(x, 2) + 2 * C[2] * x + C[1], F.derivative().applyAsDouble(x), EPS); } }