org.apache.commons.math.analysis.interpolation

## Class TricubicSplineInterpolatingFunction

- java.lang.Object
- - org.apache.commons.math.analysis.interpolation.TricubicSplineInterpolatingFunction

All Implemented Interfaces:
  TrivariateRealFunction

    public class TricubicSplineInterpolatingFunction
    extends Object
    implements TrivariateRealFunction

Function that implements the tricubic spline interpolation, as proposed in <quote> Tricubic interpolation in three dimensions
F. Lekien and J. Marsden
Int. J. Numer. Meth. Engng 2005; 63:455-471 </quote>

Since:
  2.2
Version:
  $Revision$ $Date$

### Field Summary

Fields
`private static double[][]` `AINV` Matrix to compute the spline coefficients from the function values and function derivatives values
`private TricubicSplineFunction[][][]` `splines` Set of cubic splines pacthing the whole data grid
`private double[]` `xval` Samples x-coordinates
`private double[]` `yval` Samples y-coordinates
`private double[]` `zval` Samples z-coordinates

### Constructor Summary

Constructors
Constructor and Description
`TricubicSplineInterpolatingFunction(double[] x, double[] y, double[] z, double[][][] f, double[][][] dFdX, double[][][] dFdY, double[][][] dFdZ, double[][][] d2FdXdY, double[][][] d2FdXdZ, double[][][] d2FdYdZ, double[][][] d3FdXdYdZ)`

### Method Summary

Methods
`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 int` `searchIndex(double c, double[] val)`
`double` `value(double x, double y, double z)` 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

#### zval

    private final double[] zval

Samples z-coordinates

#### splines

    private final TricubicSplineFunction[][][] splines

Set of cubic splines pacthing the whole data grid

### Constructor Detail

#### TricubicSplineInterpolatingFunction

    public TricubicSplineInterpolatingFunction(double[] x,
                                       double[] y,
                                       double[] z,
                                       double[][][] f,
                                       double[][][] dFdX,
                                       double[][][] dFdY,
                                       double[][][] dFdZ,
                                       double[][][] d2FdXdY,
                                       double[][][] d2FdXdZ,
                                       double[][][] d2FdYdZ,
                                       double[][][] d3FdXdYdZ)

Parameters:
  `x` - Sample values of the x-coordinate, in increasing order.
  `y` - Sample values of the y-coordinate, in increasing order.
  `z` - 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.
  `dFdZ` - Values of the partial derivative of function with respect to z on every grid point.
  `d2FdXdY` - Values of the cross partial derivative of function on every grid point.
  `d2FdXdZ` - Values of the cross partial derivative of function on every grid point.
  `d2FdYdZ` - Values of the cross partial derivative of function on every grid point.
  `d3FdXdYdZ` - Values of the cross partial derivative of function on every grid point.
Throws:
  `NoDataException` - if any of the arrays has zero length.
  `DimensionMismatchException` - if the various arrays do not contain the expected number of elements.
  `IllegalArgumentException` - if `x`, `y` or `z` are not strictly increasing.

### Method Detail

#### value

    public double value(double x,
               double y,
               double z)

Compute the value for the function.

Specified by:
  `value` in interface `TrivariateRealFunction`
Parameters:
  `x` - x-coordinate for which the function value should be computed.
  `y` - y-coordinate for which the function value should be computed.
  `z` - z-coordinate for which the function value should be computed.
Returns:
  the value.

#### 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 end 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:

- f(0,0,0)
- f(1,0,0)
- f(0,1,0)
- f(1,1,0)
- f(0,0,1)
- f(1,0,1)
- f(0,1,1)
- f(1,1,1)
- fx(0,0,0)
- ... (same order as above)
- fx(1,1,1)
- fy(0,0,0)
- ... (same order as above)
- fy(1,1,1)
- fz(0,0,0)
- ... (same order as above)
- fz(1,1,1)
- fxy(0,0,0)
- ... (same order as above)
- fxy(1,1,1)
- fxz(0,0,0)
- ... (same order as above)
- fxz(1,1,1)
- fyz(0,0,0)
- ... (same order as above)
- fyz(1,1,1)
- fxyz(0,0,0)
- ... (same order as above)
- fxyz(1,1,1)

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.