/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.model.finitedifference;
import org.apache.commons.lang.Validate;
/**
*
*/
public class ChebyshevMeshing extends MeshingFunction {
private final double _a;
private final double _r;
private final int _n;
/**
* @param lowerBound The lower bound
* @param upperBound The upper bound
* @param nPoints The number of points
*/
public ChebyshevMeshing(final double lowerBound, final double upperBound, final int nPoints) {
super(nPoints);
Validate.isTrue(upperBound > lowerBound, "need upperBound>lowerBound");
_a = lowerBound;
_r = (upperBound - lowerBound) / 2;
_n = nPoints - 1;
}
@Override
public Double evaluate(final Integer i) {
Validate.isTrue(i >= 0 && i < getNumberOfPoints(), "i out of range");
return _a + _r * (1 - Math.cos(i * Math.PI / _n));
}
}