@Override public double interpolate(double x, double y) { // use each y-interpolator to find the z-value for each unique x DoubleArray zValuesEffective = DoubleArray.of(yInterpolators.length, i -> yInterpolators[i].interpolate(y)); // interpolate unique x-values against derived z-values return xInterpolator.bind(xValuesUnique, zValuesEffective, xExtrapolatorLeft, xExtrapolatorRight).interpolate(x); }
@Override public double volatility(double time, double strike, double forward) { ArgChecker.isTrue(time >= 0, "Positive time"); SmileDeltaParameters smile = smileForExpiry(time); DoubleArray strikes = smile.strike(forward); BoundCurveInterpolator bound = strikeInterpolator.bind( strikes, smile.getVolatility(), strikeExtrapolatorLeft, strikeExtrapolatorRight); return bound.interpolate(strike); }
public void test_lastNode() { BoundCurveInterpolator bci = LNDFC_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(5.0), 2.0, TOL); assertEquals(bci.firstDerivative(5.0), bci.firstDerivative(4.99999999), 1e-6); }
public void test_firstNode() { BoundCurveInterpolator bci = LL_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(0.0), 3.0, TOL); assertEquals(bci.firstDerivative(0.0), bci.firstDerivative(0.00000001), 1e-6); }
public void test_firstDerivative() { BoundCurveInterpolator bci = LL_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); double eps = 1e-8; double lo = bci.interpolate(0.2); double hi = bci.interpolate(0.2 + eps); double deriv = (hi - lo) / eps; assertEquals(bci.firstDerivative(0.2), deriv, 1e-6); }
public void test_firstDerivative() { BoundCurveInterpolator bci = LINEAR_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); double eps = 1e-8; double lo = bci.interpolate(0.2); double hi = bci.interpolate(0.2 + eps); double deriv = (hi - lo) / eps; assertEquals(bci.firstDerivative(0.2), deriv, 1e-6); }
public void test_firstDerivative() { BoundCurveInterpolator bci = DQ_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); double eps = 1e-8; double lo = bci.interpolate(0.2); double hi = bci.interpolate(0.2 + eps); double deriv = (hi - lo) / eps; assertEquals(bci.firstDerivative(0.2), deriv, 1e-6); }
public void test_firstDerivative() { BoundCurveInterpolator bci = NATURAL_CUBLIC_SPLINE_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); double eps = 1e-8; double lo = bci.interpolate(0.2); double hi = bci.interpolate(0.2 + eps); double deriv = (hi - lo) / eps; assertEquals(bci.firstDerivative(0.2), deriv, 1e-6); }
public void test_sensitivities() { BoundCurveInterpolator bci = DQ_INTERPOLATOR.bind(X_SENS, Y_SENS, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); double lastXValue = X_SENS.get(X_SENS.size() - 1); for (int i = 0; i < 100; i++) { double t = lastXValue * RANDOM.nextDouble(); DoubleArray sensitivity = bci.parameterSensitivity(t); assertEquals(sensitivity.sum(), 1d, TOL); } }
public void test_firstNode() { BoundCurveInterpolator bci = NATURAL_SPLINE_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(0.0), 3.0, TOL); assertEquals(bci.parameterSensitivity(0.0).get(0), 1d, TOL); assertEquals(bci.parameterSensitivity(0.0).get(1), 0d, TOL); }
public void test_allNodes() { BoundCurveInterpolator bci = LNDFC_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); for (int i = 0; i < X_DATA.size(); i++) { assertEquals(bci.interpolate(X_DATA.get(i)), Y_DATA.get(i), TOL); } }
public void test_allNodes() { BoundCurveInterpolator bci = NATURAL_SPLINE_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); for (int i = 0; i < X_DATA.size(); i++) { assertEquals(bci.interpolate(X_DATA.get(i)), Y_DATA.get(i), TOL); } }
public void test_allNodes() { BoundCurveInterpolator bci = LINEAR_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); for (int i = 0; i < X_DATA.size(); i++) { assertEquals(bci.interpolate(X_DATA.get(i)), Y_DATA.get(i), TOL); } }
public void test_allNodes() { BoundCurveInterpolator bci = LNCMP_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); for (int i = 0; i < X_DATA.size(); i++) { assertEquals(bci.interpolate(X_DATA.get(i)), Y_DATA.get(i), TOL); } }
public void test_allNodes() { BoundCurveInterpolator bci = DQ_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); for (int i = 0; i < X_DATA.size(); i++) { assertEquals(bci.interpolate(X_DATA.get(i)), Y_DATA.get(i), TOL); } }
public void test_lastNode() { BoundCurveInterpolator bci = INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(5.0), 2.0, TOL); assertEquals(bci.parameterSensitivity(5.0).get(X_DATA.size() - 2), 0d, TOL); assertEquals(bci.parameterSensitivity(5.0).get(X_DATA.size() - 1), 1d, TOL); }
public void test_lastNode() { BoundCurveInterpolator bci = TIME_SQUARE_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(5.0), 2.0, TOL); assertEquals(bci.parameterSensitivity(5.0).get(X_DATA.size() - 2), 0d, TOL); assertEquals(bci.parameterSensitivity(5.0).get(X_DATA.size() - 1), 1d, TOL); }
public void test_lastNode() { BoundCurveInterpolator bci = SQUARE_LINEAR_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(5.0), 2.0, TOL); assertEquals(bci.parameterSensitivity(5.0).get(X_DATA.size() - 2), 0d, TOL); assertEquals(bci.parameterSensitivity(5.0).get(X_DATA.size() - 1), 1d, TOL); }
public void test_interpolation() { BoundCurveInterpolator bci = TIME_SQUARE_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); for (int i = 0; i < X_DATA.size(); i++) { assertEquals(bci.interpolate(X_DATA.get(i)), Y_DATA.get(i), TOL); } for (int i = 0; i < X_TEST.size(); i++) { assertEquals(bci.interpolate(X_TEST.get(i)), Y_TEST.get(i), TOL); } }
public void smallKeyTest() { DoubleArray xValues = DoubleArray.of(1e-13, 3e-8, 2e-5); DoubleArray yValues = DoubleArray.of(1.0, 13.2, 1.5); double keyDw = 1.0e-12; BoundCurveInterpolator bound = INTERP.bind(xValues, yValues); assertThrowsIllegalArg(() -> bound.interpolate(keyDw)); assertThrowsIllegalArg(() -> bound.firstDerivative(keyDw)); assertThrowsIllegalArg(() -> bound.parameterSensitivity(keyDw)); }