org.apache.commons.math.analysis
Class PolynomialFunctionNewtonForm

java.lang.Object
  extended by org.apache.commons.math.analysis.PolynomialFunctionNewtonForm
All Implemented Interfaces:
java.io.Serializable, UnivariateRealFunction

public class PolynomialFunctionNewtonForm
extends java.lang.Object
implements UnivariateRealFunction, java.io.Serializable

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[]

Since:
1.2
Version:
$Revision: 620312 $ $Date: 2008-02-10 12:28:59 -0700 (Sun, 10 Feb 2008) $
See Also:
Serialized Form

Field Summary
private  double[] a
          Members of c[] are called centers of the Newton polynomial.
private  double[] c
          Members of c[] are called centers of the Newton polynomial.
private  double[] coefficients
          The coefficients of the polynomial, ordered by degree -- i.e.
private  boolean coefficientsComputed
          Whether the polynomial coefficients are available.
(package private) static long serialVersionUID
          serializable version identifier
 
Constructor Summary
PolynomialFunctionNewtonForm(double[] a, double[] c)
          Construct a Newton polynomial with the given a[] and c[].
 
Method Summary
protected  void computeCoefficients()
          Calculate the normal polynomial coefficients given the Newton form.
 int degree()
          Returns the degree of the polynomial.
static double evaluate(double[] a, double[] c, double z)
          Evaluate the Newton polynomial using nested multiplication.
 double[] getCenters()
          Returns a copy of the centers array.
 double[] getCoefficients()
          Returns a copy of the coefficients array.
 double[] getNewtonCoefficients()
          Returns a copy of coefficients in Newton form formula.
 double value(double z)
          Calculate the function value at the given point.
protected static void verifyInputArray(double[] a, double[] c)
          Verifies that the input arrays are valid.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

serialVersionUID

static final long serialVersionUID
serializable version identifier

See Also:
Constant Field Values

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.


a

private double[] a
Members of c[] are called centers of the Newton polynomial. When all c[i] = 0, a[] becomes normal polynomial coefficients, i.e. a[i] = coefficients[i].


c

private double[] c
Members of c[] are called centers of the Newton polynomial. When all c[i] = 0, a[] becomes normal polynomial coefficients, i.e. a[i] = coefficients[i].


coefficientsComputed

private boolean coefficientsComputed
Whether the polynomial coefficients are available.

Constructor Detail

PolynomialFunctionNewtonForm

PolynomialFunctionNewtonForm(double[] a,
                             double[] c)
                       throws java.lang.IllegalArgumentException
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 - the coefficients in Newton form formula
c - the centers
Throws:
java.lang.IllegalArgumentException - if input arrays are not valid
Method Detail

value

public double value(double z)
             throws FunctionEvaluationException
Calculate the function value at the given point.

Specified by:
value in interface UnivariateRealFunction
Parameters:
z - the point at which the function value is to be computed
Returns:
the function value
Throws:
FunctionEvaluationException - if a runtime error occurs
See Also:
UnivariateRealFunction.value(double)

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 FunctionEvaluationException,
                              java.lang.IllegalArgumentException
Evaluate the Newton polynomial using nested multiplication. It is also called Horner's Rule and takes O(N) time.

Parameters:
a - the coefficients in Newton form formula
c - the centers
z - the point at which the function value is to be computed
Returns:
the function value
Throws:
FunctionEvaluationException - if a runtime error occurs
java.lang.IllegalArgumentException - if inputs are not valid

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 java.lang.IllegalArgumentException
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:
java.lang.IllegalArgumentException - if not valid
See Also:
DividedDifferenceInterpolator.computeDividedDifference(double[], double[])