/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate;
import org.apache.commons.lang.Validate;
import com.opengamma.analytics.math.function.ParameterizedFunction;
import com.opengamma.analytics.math.matrix.DoubleMatrix1D;
import com.opengamma.analytics.math.utilities.Epsilon;
import com.opengamma.analytics.util.serialization.InvokedSerializedForm;
/**
*
*/
public class NelsonSiegelBondCurveModel {
public ParameterizedFunction<Double, DoubleMatrix1D, Double> getParameterizedFunction() {
return new ParameterizedFunction<Double, DoubleMatrix1D, Double>() {
@Override
public Double evaluate(final Double t, final DoubleMatrix1D parameters) {
Validate.notNull(t, "t");
Validate.notNull(parameters, "parameters");
Validate.isTrue(parameters.getNumberOfElements() == getNumberOfParameters());
final double beta0 = parameters.getEntry(0);
final double beta1 = parameters.getEntry(1);
final double beta2 = parameters.getEntry(2);
final double lambda = parameters.getEntry(3);
final double x1 = t / lambda;
final double x2 = Epsilon.epsilon(-x1);
return beta0 + beta1 * x2 + beta2 * (x2 - Math.exp(-x1));
}
public Object writeReplace() {
return new InvokedSerializedForm(NelsonSiegelBondCurveModel.class, "getParameterizedFunction");
}
@Override
public int getNumberOfParameters() {
return 4;
}
};
}
}