/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.interpolation;
import org.apache.commons.lang.Validate;
import com.opengamma.analytics.math.interpolation.data.Interpolator1DDataBundle;
/**
*
*/
public class FlatExtrapolator1D extends Interpolator1D {
private static final long serialVersionUID = 1L;
@Override
public Interpolator1DDataBundle getDataBundle(final double[] x, final double[] y) {
throw new UnsupportedOperationException();
}
@Override
public Interpolator1DDataBundle getDataBundleFromSortedArrays(final double[] x, final double[] y) {
throw new UnsupportedOperationException();
}
@Override
public Double interpolate(final Interpolator1DDataBundle data, final Double value) {
Validate.notNull(data, "data");
Validate.notNull(value, "value");
if (value < data.firstKey()) {
return data.firstValue();
} else if (value > data.lastKey()) {
return data.lastValue();
}
throw new IllegalArgumentException("Value " + value + " was within data range");
}
@Override
public double firstDerivative(final Interpolator1DDataBundle data, final Double value) {
Validate.notNull(data, "data");
Validate.notNull(value, "value");
if (value < data.firstKey()) {
return 0.;
} else if (value > data.lastKey()) {
return 0.;
}
throw new IllegalArgumentException("Value " + value + " was within data range");
}
@Override
public double[] getNodeSensitivitiesForValue(final Interpolator1DDataBundle data, final Double value) {
Validate.notNull(data, "data");
final int n = data.size();
if (value < data.firstKey()) {
final double[] result = new double[n];
result[0] = 1;
return result;
} else if (value > data.lastKey()) {
final double[] result = new double[n];
result[n - 1] = 1;
return result;
}
throw new IllegalArgumentException("Value " + value + " was within data range");
}
}