/**
* 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.matrix.DoubleMatrix1D;
import com.opengamma.analytics.math.matrix.DoubleMatrix2D;
import com.opengamma.analytics.math.matrix.IdentityMatrix;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.tuple.DoublesPair;
/**
* Model the volatilities directly, i.e. the model parameters are the volatilities.<p>
* This gives a {@link DiscreteVolatilityFunction} that is a one-to-one mapping from model parameters to volatilities,
* i.e. the model parameters are the volatilities.
*/
public class DiscreteVolatilityFunctionProviderDirect extends DiscreteVolatilityFunctionProvider {
@Override
public DiscreteVolatilityFunction from(final DoublesPair[] expiryStrikePoints) {
ArgumentChecker.noNulls(expiryStrikePoints, "strikeExpiryPoints");
final int n = expiryStrikePoints.length;
final IdentityMatrix iM = new IdentityMatrix(n);
return new DiscreteVolatilityFunction() {
@Override
public DoubleMatrix1D evaluate(final DoubleMatrix1D x) {
ArgumentChecker.isTrue(x.getNumberOfElements() == n, "size of x");
return new DoubleMatrix1D(x.getData());
}
@Override
public DoubleMatrix2D calculateJacobian(final DoubleMatrix1D x) {
return iM;
}
@Override
public int getLengthOfDomain() {
return n;
}
@Override
public int getLengthOfRange() {
return n;
}
};
}
}