org.apache.commons.math3.analysis.interpolation
Class BicubicSplineInterpolatingFunction

java.lang.Object
  extended by org.apache.commons.math3.analysis.interpolation.BicubicSplineInterpolatingFunction
All Implemented Interfaces:
BivariateFunction

public class BicubicSplineInterpolatingFunction
extends java.lang.Object
implements BivariateFunction

Function that implements the bicubic spline interpolation.

Since:
2.1
Version:
$Id: BicubicSplineInterpolatingFunction.java 1379904 2012-09-01 23:54:52Z erans $

Field Summary
private static double[][] AINV
          Matrix to compute the spline coefficients from the function values and function derivatives values
private  BivariateFunction[][][] partialDerivatives
          Partial derivatives The value of the first index determines the kind of derivatives: 0 = first partial derivatives wrt x 1 = first partial derivatives wrt y 2 = second partial derivatives wrt x 3 = second partial derivatives wrt y 4 = cross partial derivatives
private  BicubicSplineFunction[][] splines
          Set of cubic splines patching the whole data grid
private  double[] xval
          Samples x-coordinates
private  double[] yval
          Samples y-coordinates
 
Constructor Summary
BicubicSplineInterpolatingFunction(double[] x, double[] y, double[][] f, double[][] dFdX, double[][] dFdY, double[][] d2FdXdY)
           
 
Method Summary
private  void computePartialDerivatives()
          Compute all partial derivatives.
private  double[] computeSplineCoefficients(double[] beta)
          Compute the spline coefficients from the list of function values and function partial derivatives values at the four corners of a grid element.
private  double partialDerivative(int which, double x, double y)
           
 double partialDerivativeX(double x, double y)
           
 double partialDerivativeXX(double x, double y)
           
 double partialDerivativeXY(double x, double y)
           
 double partialDerivativeY(double x, double y)
           
 double partialDerivativeYY(double x, double y)
           
private  int searchIndex(double c, double[] val)
           
 double value(double x, double y)
          Compute the value for the function.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

AINV

private static final double[][] AINV
Matrix to compute the spline coefficients from the function values and function derivatives values


xval

private final double[] xval
Samples x-coordinates


yval

private final double[] yval
Samples y-coordinates


splines

private final BicubicSplineFunction[][] splines
Set of cubic splines patching the whole data grid


partialDerivatives

private BivariateFunction[][][] partialDerivatives
Partial derivatives The value of the first index determines the kind of derivatives: 0 = first partial derivatives wrt x 1 = first partial derivatives wrt y 2 = second partial derivatives wrt x 3 = second partial derivatives wrt y 4 = cross partial derivatives

Constructor Detail

BicubicSplineInterpolatingFunction

public BicubicSplineInterpolatingFunction(double[] x,
                                          double[] y,
                                          double[][] f,
                                          double[][] dFdX,
                                          double[][] dFdY,
                                          double[][] d2FdXdY)
                                   throws DimensionMismatchException,
                                          NoDataException,
                                          NonMonotonicSequenceException
Parameters:
x - Sample values of the x-coordinate, in increasing order.
y - Sample values of the y-coordinate, in increasing order.
f - Values of the function on every grid point.
dFdX - Values of the partial derivative of function with respect to x on every grid point.
dFdY - Values of the partial derivative of function with respect to y on every grid point.
d2FdXdY - Values of the cross partial derivative of function on every grid point.
Throws:
DimensionMismatchException - if the various arrays do not contain the expected number of elements.
NonMonotonicSequenceException - if x or y are not strictly increasing.
NoDataException - if any of the arrays has zero length.
Method Detail

value

public double value(double x,
                    double y)
             throws OutOfRangeException
Compute the value for the function.

Specified by:
value in interface BivariateFunction
Parameters:
x - Abscissa for which the function value should be computed.
y - Ordinate for which the function value should be computed.
Returns:
the value.
Throws:
OutOfRangeException

partialDerivativeX

public double partialDerivativeX(double x,
                                 double y)
                          throws OutOfRangeException
Parameters:
x - x-coordinate.
y - y-coordinate.
Returns:
the value at point (x, y) of the first partial derivative with respect to x.
Throws:
OutOfRangeException - if x (resp. y) is outside the range defined by the boundary values of xval (resp. yval).

partialDerivativeY

public double partialDerivativeY(double x,
                                 double y)
                          throws OutOfRangeException
Parameters:
x - x-coordinate.
y - y-coordinate.
Returns:
the value at point (x, y) of the first partial derivative with respect to y.
Throws:
OutOfRangeException - if x (resp. y) is outside the range defined by the boundary values of xval (resp. yval).

partialDerivativeXX

public double partialDerivativeXX(double x,
                                  double y)
                           throws OutOfRangeException
Parameters:
x - x-coordinate.
y - y-coordinate.
Returns:
the value at point (x, y) of the second partial derivative with respect to x.
Throws:
OutOfRangeException - if x (resp. y) is outside the range defined by the boundary values of xval (resp. yval).

partialDerivativeYY

public double partialDerivativeYY(double x,
                                  double y)
                           throws OutOfRangeException
Parameters:
x - x-coordinate.
y - y-coordinate.
Returns:
the value at point (x, y) of the second partial derivative with respect to y.
Throws:
OutOfRangeException - if x (resp. y) is outside the range defined by the boundary values of xval (resp. yval).

partialDerivativeXY

public double partialDerivativeXY(double x,
                                  double y)
                           throws OutOfRangeException
Parameters:
x - x-coordinate.
y - y-coordinate.
Returns:
the value at point (x, y) of the second partial cross-derivative.
Throws:
OutOfRangeException - if x (resp. y) is outside the range defined by the boundary values of xval (resp. yval).

partialDerivative

private double partialDerivative(int which,
                                 double x,
                                 double y)
                          throws OutOfRangeException
Parameters:
which - First index in partialDerivatives.
x - x-coordinate.
y - y-coordinate.
Returns:
the value at point (x, y) of the selected partial derivative.
Throws:
OutOfRangeException - if x (resp. y) is outside the range defined by the boundary values of xval (resp. yval).

computePartialDerivatives

private void computePartialDerivatives()
Compute all partial derivatives.


searchIndex

private int searchIndex(double c,
                        double[] val)
Parameters:
c - Coordinate.
val - Coordinate samples.
Returns:
the index in val corresponding to the interval containing c, or -1 if c is out of the range defined by the boundary values of val.

computeSplineCoefficients

private double[] computeSplineCoefficients(double[] beta)
Compute the spline coefficients from the list of function values and function partial derivatives values at the four corners of a grid element. They must be specified in the following order: where the subscripts indicate the partial derivative with respect to the corresponding variable(s).

Parameters:
beta - List of function values and function partial derivatives values.
Returns:
the spline coefficients.


Copyright (c) 2003-2013 Apache Software Foundation