/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.model.volatility.discrete;
import com.opengamma.analytics.math.differentiation.VectorFieldFirstOrderDifferentiator;
import com.opengamma.analytics.math.function.Function1D;
import com.opengamma.analytics.math.function.VectorFunction;
import com.opengamma.analytics.math.matrix.DoubleMatrix1D;
import com.opengamma.analytics.math.matrix.DoubleMatrix2D;
/**
* abstraction for a model that takes a set of parameters and returns (Black) volatilities at specified points
* If a continuous volatility surface is required, use {@link VolatilitySurfaceProvider} instead.
*/
public abstract class DiscreteVolatilityFunction extends VectorFunction {
private static final VectorFieldFirstOrderDifferentiator DIFF = new VectorFieldFirstOrderDifferentiator();
private final Function1D<DoubleMatrix1D, DoubleMatrix2D> _fdJac = DIFF.differentiate(this);
/**
* Evaluate the Jacobian using finite difference. This is used for testing when {@link evaluateJacobian} has
* been overridden with an analytic method
* @param x set of model parameters
* @return The Jacobian (matrix of sensitivities of caplet volatilities to model parameters)
*/
public DoubleMatrix2D calculateJacobianViaFD(final DoubleMatrix1D x) {
return _fdJac.evaluate(x);
}
}