@Override
public double[] getNodeSensitivitiesForValue(final Interpolator1DDataBundle data, final Double value) {
Validate.notNull(value, "value");
Validate.notNull(data, "data bundle");
Validate.isTrue(data instanceof Interpolator1DPiecewisePoynomialWithExtraKnotsDataBundle);
final Interpolator1DPiecewisePoynomialWithExtraKnotsDataBundle polyData = (Interpolator1DPiecewisePoynomialWithExtraKnotsDataBundle) data;
final int nData = polyData.size();
final double[] res = new double[nData];
final double eps = polyData.getEps();
final double small = polyData.getSmall();
for (int i = 0; i < nData; ++i) {
final double den = Math.abs(polyData.getValues()[i]) < small ? eps : polyData.getValues()[i] * eps;
final double up = FUNC.evaluate(polyData.getPiecewisePolynomialResultUp()[i], value).getData()[0];
final double dw = FUNC.evaluate(polyData.getPiecewisePolynomialResultDw()[i], value).getData()[0];
res[i] = 0.5 * (up - dw) / den;
}
return res;
}