Class AkimaSplineInterpolator

java.lang.Object
org.apache.commons.math3.analysis.interpolation.AkimaSplineInterpolator
All Implemented Interfaces:
UnivariateInterpolator

public class AkimaSplineInterpolator extends Object implements UnivariateInterpolator
Computes a cubic spline interpolation for the data set using the Akima algorithm, as originally formulated by Hiroshi Akima in his 1970 paper "A New Method of Interpolation and Smooth Curve Fitting Based on Local Procedures." J. ACM 17, 4 (October 1970), 589-602. DOI=10.1145/321607.321609 http://doi.acm.org/10.1145/321607.321609

This implementation is based on the Akima implementation in the CubicSpline class in the Math.NET Numerics library. The method referenced is CubicSpline.InterpolateAkimaSorted

The interpolate method returns a PolynomialSplineFunction consisting of n cubic polynomials, defined over the subintervals determined by the x values, x[0] < x[i] ... < x[n]. The Akima algorithm requires that n >= 5.

  • Field Details

    • MINIMUM_NUMBER_POINTS

      private static final int MINIMUM_NUMBER_POINTS
      The minimum number of points that are needed to compute the function.
      See Also:
  • Constructor Details

    • AkimaSplineInterpolator

      public AkimaSplineInterpolator()
  • Method Details

    • interpolate

      Computes an interpolating function for the data set.
      Specified by:
      interpolate in interface UnivariateInterpolator
      Parameters:
      xvals - the arguments for the interpolation points
      yvals - the values for the interpolation points
      Returns:
      a function which interpolates the data set
      Throws:
      DimensionMismatchException - if xvals and yvals have different sizes.
      NonMonotonicSequenceException - if xvals is not sorted in strict increasing order.
      NumberIsTooSmallException - if the size of xvals is smaller than 5.
    • differentiateThreePoint

      private double differentiateThreePoint(double[] xvals, double[] yvals, int indexOfDifferentiation, int indexOfFirstSample, int indexOfSecondsample, int indexOfThirdSample)
      Three point differentiation helper, modeled off of the same method in the Math.NET CubicSpline class. This is used by both the Apache Math and the Math.NET Akima Cubic Spline algorithms
      Parameters:
      xvals - x values to calculate the numerical derivative with
      yvals - y values to calculate the numerical derivative with
      indexOfDifferentiation - index of the elemnt we are calculating the derivative around
      indexOfFirstSample - index of the first element to sample for the three point method
      indexOfSecondsample - index of the second element to sample for the three point method
      indexOfThirdSample - index of the third element to sample for the three point method
      Returns:
      the derivative
    • interpolateHermiteSorted

      private PolynomialSplineFunction interpolateHermiteSorted(double[] xvals, double[] yvals, double[] firstDerivatives)
      Creates a Hermite cubic spline interpolation from the set of (x,y) value pairs and their derivatives. This is modeled off of the InterpolateHermiteSorted method in the Math.NET CubicSpline class.
      Parameters:
      xvals - x values for interpolation
      yvals - y values for interpolation
      firstDerivatives - first derivative values of the function
      Returns:
      polynomial that fits the function