Class PolynomialFunctionNewtonForm

java.lang.Object
org.hipparchus.analysis.polynomials.PolynomialFunctionNewtonForm
All Implemented Interfaces:
UnivariateDifferentiableFunction, FieldUnivariateFunction, UnivariateFunction

public class PolynomialFunctionNewtonForm extends Object implements UnivariateDifferentiableFunction, FieldUnivariateFunction
Implements the representation of a real polynomial function in Newton Form. For reference, see Elementary Numerical Analysis, ISBN 0070124477, chapter 2.

The formula of polynomial in Newton form is p(x) = a[0] + a[1](x-c[0]) + a[2](x-c[0])(x-c[1]) + ... + a[n](x-c[0])(x-c[1])...(x-c[n-1]) Note that the length of a[] is one more than the length of c[]

  • Constructor Details

    • PolynomialFunctionNewtonForm

      public PolynomialFunctionNewtonForm(double[] a, double[] c) throws MathIllegalArgumentException, NullArgumentException
      Construct a Newton polynomial with the given a[] and c[]. The order of centers are important in that if c[] shuffle, then values of a[] would completely change, not just a permutation of old a[].

      The constructor makes copy of the input arrays and assigns them.

      Parameters:
      a - Coefficients in Newton form formula.
      c - Centers.
      Throws:
      NullArgumentException - if any argument is null.
      MathIllegalArgumentException - if any array has zero length.
      MathIllegalArgumentException - if the size difference between a and c is not equal to 1.
  • Method Details

    • value

      public double value(double z)
      Calculate the function value at the given point.
      Specified by:
      value in interface UnivariateFunction
      Parameters:
      z - Point at which the function value is to be computed.
      Returns:
      the function value.
    • value

      public <T extends Derivative<T>> T value(T t)
      Compute the value for the function.
      Specified by:
      value in interface UnivariateDifferentiableFunction
      Type Parameters:
      T - the type of the field elements
      Parameters:
      t - the point for which the function value should be computed
      Returns:
      the value
    • value

      public <T extends CalculusFieldElement<T>> T value(T t)
      Compute the value of the function.
      Specified by:
      value in interface FieldUnivariateFunction
      Type Parameters:
      T - the type of the field elements
      Parameters:
      t - Point at which the function value should be computed.
      Returns:
      the value of the function.
    • degree

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

      public double[] getNewtonCoefficients()
      Returns a copy of coefficients in Newton form formula.

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

      Returns:
      a fresh copy of coefficients in Newton form formula
    • getCenters

      public double[] getCenters()
      Returns a copy of the centers array.

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

      Returns:
      a fresh copy of the centers array.
    • getCoefficients

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

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

      Returns:
      a fresh copy of the coefficients array.
    • evaluate

      public static double evaluate(double[] a, double[] c, double z) throws MathIllegalArgumentException, NullArgumentException
      Evaluate the Newton polynomial using nested multiplication. It is also called Horner's Rule and takes O(N) time.
      Parameters:
      a - Coefficients in Newton form formula.
      c - Centers.
      z - Point at which the function value is to be computed.
      Returns:
      the function value.
      Throws:
      NullArgumentException - if any argument is null.
      MathIllegalArgumentException - if any array has zero length.
      MathIllegalArgumentException - if the size difference between a and c is not equal to 1.
    • computeCoefficients

      protected void computeCoefficients()
      Calculate the normal polynomial coefficients given the Newton form. It also uses nested multiplication but takes O(N^2) time.
    • verifyInputArray

      protected static void verifyInputArray(double[] a, double[] c) throws MathIllegalArgumentException, NullArgumentException
      Verifies that the input arrays are valid.

      The centers must be distinct for interpolation purposes, but not for general use. Thus it is not verified here.

      Parameters:
      a - the coefficients in Newton form formula
      c - the centers
      Throws:
      NullArgumentException - if any argument is null.
      MathIllegalArgumentException - if any array has zero length.
      MathIllegalArgumentException - if the size difference between a and c is not equal to 1.