/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.market.curve.interpolator; import com.opengamma.strata.collect.array.DoubleArray; /** * A curve interpolator that has been bound to a specific curve. * <p> * A bound interpolator is created from a {@link CurveInterpolator}. * The bind process takes the definition of the interpolator and combines it with the x-y values. * This allows implementations to optimize interpolation calculations. * <p> * A bound interpolator is typically linked to two {@linkplain BoundCurveExtrapolator extrapolators}. * If an attempt is made to interpolate an x-value outside the range defined by * the first and last nodes, the appropriate extrapolator will be used. */ public interface BoundCurveInterpolator { /** * Computes the y-value for the specified x-value by interpolation. * * @param x the x-value to find the y-value for * @return the value at the x-value * @throws RuntimeException if the y-value cannot be calculated */ public abstract double interpolate(double x); /** * Computes the first derivative of the y-value for the specified x-value. * <p> * The first derivative is {@code dy/dx}. * * @param x the x-value at which the derivative is taken * @return the first derivative * @throws RuntimeException if the derivative cannot be calculated */ public abstract double firstDerivative(double x); /** * Computes the sensitivity of the y-value with respect to the curve parameters. * <p> * This returns an array with one element for each parameter of the curve. * The array contains the sensitivity of the y-value at the specified x-value to each parameter. * * @param x the x-value at which the parameter sensitivity is computed * @return the sensitivity * @throws RuntimeException if the sensitivity cannot be calculated */ public abstract DoubleArray parameterSensitivity(double x); //------------------------------------------------------------------------- /** * Binds this interpolator to the specified extrapolators. * <p> * The bound interpolator provides methods to interpolate the y-value for a x-value. * If an attempt is made to interpolate an x-value outside the range defined by * the first and last nodes, the appropriate extrapolator will be used. * <p> * This method is intended to be called from within * {@link CurveInterpolator#bind(DoubleArray, DoubleArray, CurveExtrapolator, CurveExtrapolator)}. * * @param extrapolatorLeft the extrapolator for x-values on the left * @param extrapolatorRight the extrapolator for x-values on the right * @return the bound interpolator */ public abstract BoundCurveInterpolator bind( BoundCurveExtrapolator extrapolatorLeft, BoundCurveExtrapolator extrapolatorRight); }