Class PolynomialFunctionLagrangeForm

  • All Implemented Interfaces:
    UnivariateFunction

    public class PolynomialFunctionLagrangeForm
    extends java.lang.Object
    implements UnivariateFunction
    Implements the representation of a real polynomial function in Lagrange Form. For reference, see Introduction to Numerical Analysis, ISBN 038795452X, chapter 2.

    The approximated function should be smooth enough for Lagrange polynomial to work well. Otherwise, consider using splines instead.

    Since:
    1.2
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private double[] coefficients
      The coefficients of the polynomial, ordered by degree -- i.e.
      private boolean coefficientsComputed
      Whether the polynomial coefficients are available.
      private double[] x
      Interpolating points (abscissas).
      private double[] y
      Function values at interpolating points.
    • Constructor Summary

      Constructors 
      Constructor Description
      PolynomialFunctionLagrangeForm​(double[] x, double[] y)
      Construct a Lagrange polynomial with the given abscissas and function values.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void computeCoefficients()
      Calculate the coefficients of Lagrange polynomial from the interpolation data.
      int degree()
      Returns the degree of the polynomial.
      static double evaluate​(double[] x, double[] y, double z)
      Evaluate the Lagrange polynomial using Neville's Algorithm.
      private static double evaluateInternal​(double[] x, double[] y, double z)
      Evaluate the Lagrange polynomial using Neville's Algorithm.
      double[] getCoefficients()
      Returns a copy of the coefficients array.
      double[] getInterpolatingPoints()
      Returns a copy of the interpolating points array.
      double[] getInterpolatingValues()
      Returns a copy of the interpolating values array.
      double value​(double z)
      Calculate the function value at the given point.
      static boolean verifyInterpolationArray​(double[] x, double[] y, boolean abort)
      Check that the interpolation arrays are valid.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • coefficients

        private double[] coefficients
        The coefficients of the polynomial, ordered by degree -- i.e. coefficients[0] is the constant term and coefficients[n] is the coefficient of x^n where n is the degree of the polynomial.
      • x

        private final double[] x
        Interpolating points (abscissas).
      • y

        private final double[] y
        Function values at interpolating points.
      • coefficientsComputed

        private boolean coefficientsComputed
        Whether the polynomial coefficients are available.
    • Method Detail

      • degree

        public int degree()
        Returns the degree of the polynomial.
        Returns:
        the degree of the polynomial
      • getInterpolatingPoints

        public double[] getInterpolatingPoints()
        Returns a copy of the interpolating points array.

        Changes made to the returned copy will not affect the polynomial.

        Returns:
        a fresh copy of the interpolating points array
      • getInterpolatingValues

        public double[] getInterpolatingValues()
        Returns a copy of the interpolating values array.

        Changes made to the returned copy will not affect the polynomial.

        Returns:
        a fresh copy of the interpolating values array
      • getCoefficients

        public double[] getCoefficients()
        Returns a copy of the coefficients array.

        Changes made to the returned copy will not affect the polynomial.

        Note that coefficients computation can be ill-conditioned. Use with caution and only when it is necessary.

        Returns:
        a fresh copy of the coefficients array
      • evaluateInternal

        private static double evaluateInternal​(double[] x,
                                               double[] y,
                                               double z)
        Evaluate the Lagrange polynomial using Neville's Algorithm. It takes O(n^2) time.
        Parameters:
        x - Interpolating points array.
        y - Interpolating values array.
        z - Point at which the function value is to be computed.
        Returns:
        the function value.
        Throws:
        DimensionMismatchException - if x and y have different lengths.
        NonMonotonicSequenceException - if x is not sorted in strictly increasing order.
        NumberIsTooSmallException - if the size of x is less than 2.
      • computeCoefficients

        protected void computeCoefficients()
        Calculate the coefficients of Lagrange polynomial from the interpolation data. It takes O(n^2) time. Note that this computation can be ill-conditioned: Use with caution and only when it is necessary.