Package com.imsl.math

Class Spline2DLeastSquares

java.lang.Object
com.imsl.math.Spline2D
com.imsl.math.Spline2DLeastSquares
All Implemented Interfaces:
Serializable, Cloneable

public class Spline2DLeastSquares extends Spline2D
Computes a two-dimensional, tensor-product spline approximant using least squares.

The Spline2DLeastSquares class computes a tensor-product spline least-squares approximation to weighted tensor-product data. The input consists of data vectors to specify the tensor-product grid for the data, two vectors with the weights, the values of the surface on the grid, and the specification for the tensor-product spline. The grid is specified by the two vectors x = xData and y = yData of length
n = xData.length and m = yData.length, respectively. A two-dimensional array f = fData contains the data values which are to be fit. The two vectors \(w_x\) = xWeights and \(w_y\) = yWeights contain the weights for the weighted least-squares problem. The information for the approximating tensor-product spline can be provided using the setXOrder, setYOrder, setXKnots and setYKnots methods. This information is contained in \(k_x\) = xOrder, \(t_x\) = xKnots, and N = xSplineSpaceDim for the spline in the first variable, and in \(k_y\) = yOrder, \(t_y\) = yKnots and M = ySplineSpaceDim for the spline in the second variable. This class computes coefficients for the tensor-product spline by solving the normal equations in tensor-product form as discussed in de Boor (1978, Chapter 17). The interested reader might also want to study the paper by Grosse (1980).

As the computation proceeds, we obtain coefficients c minimizing $$\sum\limits_{i = 0}^{n - 1} {\sum\limits_{j = 0}^{m - 1} {w_x \left( i \right)w_y \left( j \right)} \left[ {\sum\limits_{k = 0}^{N - 1} {\sum\limits_{l = 0}^{M - 1} {c_{kl} } B_{kl} \left( {x_i ,y_i } \right) - f_{ij} } } \right]} ^2$$ where the function \(B_{kl}\) is the tensor-product of two B-splines of order \(k_x\) and \(k_y\). Specifically, we have $$B_{kl} \left( {x,y} \right) = B_{k,k_x ,t_x } \left( x \right)B_{l,k_y ,t_y } \left( y \right)$$ The spline $$\sum\limits_{k = 0}^{N - 1} {\sum\limits_{l = 0}^{M - 1} {c_{kl} } } B_{kl}$$ and its partial derivatives can be evaluated using the value method.

See Also:
  • Constructor Summary

    Constructors
    Constructor
    Description
    Spline2DLeastSquares(double[] xData, double[] yData, double[][] fData, int xSplineSpaceDim, int ySplineSpaceDim)
    Constructor for Spline2DLeastSquares.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Computes a two-dimensional, tensor-product spline approximant using least squares.
    double
    Returns the weighted error sum of squares.
    int
    Returns the order of the spline in the x-direction.
    double[]
    Returns the weights for the least-squares fit in the x-direction.
    int
    Returns the order of the spline in the y-direction.
    double[]
    Returns the weights for the least-squares fit in the y-direction.
    void
    setXKnots(double[] xKnots)
    Sets the knot sequences of the spline in the x-direction.
    void
    setXOrder(int xOrder)
    Sets the order of the spline in the x-direction.
    void
    setXWeights(double[] xWeights)
    Sets the weights for the least-squares fit in the x-direction.
    void
    setYKnots(double[] yKnots)
    Sets the knot sequences of the spline in the y-direction.
    void
    setYOrder(int yOrder)
    Sets the order of the spline in the y-direction.
    void
    setYWeights(double[] yWeights)
    Sets the weights for the least-squares fit in the y-direction.

    Methods inherited from class com.imsl.math.Spline2D

    derivative, derivative, getCoefficients, getXKnots, getYKnots, integral, value, value

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Spline2DLeastSquares

      public Spline2DLeastSquares(double[] xData, double[] yData, double[][] fData, int xSplineSpaceDim, int ySplineSpaceDim)
      Constructor for Spline2DLeastSquares.
      Parameters:
      xData - a double array containing the data points in the x-direction.
      yData - a double array containing the data points in the y-direction.
      fData - a double matrix of size xData.length by yData.length containing the values to be approximated.
      xSplineSpaceDim - an int scalar value specifying the linear dimension of the spline subspace for the x variable. It should be smaller than xData.length and greater than or equal to xOrder (whose default value is 4).
      ySplineSpaceDim - an int scalar value specifying the linear dimension of the spline subspace for the y variable. It should be smaller than yData.length and greater than or equal to yOrder (whose default value is 4).
  • Method Details

    • getErrorSumOfSquares

      public double getErrorSumOfSquares()
      Returns the weighted error sum of squares.
      Returns:
      a double scalar containing the weighted error sum of squares.
    • compute

      public void compute()
      Computes a two-dimensional, tensor-product spline approximant using least squares.
    • setXOrder

      public void setXOrder(int xOrder)
      Sets the order of the spline in the x-direction.
      Parameters:
      xOrder - an int scalar value specifying the order of the spline in the x-direction. xOrder must be at least 1. Default: xOrder = 4, implying a tensor-product cubic spline.
    • getXOrder

      public int getXOrder()
      Returns the order of the spline in the x-direction.
      Returns:
      an int scalar containing the order of the spline in the x-direction.
    • setYOrder

      public void setYOrder(int yOrder)
      Sets the order of the spline in the y-direction.
      Parameters:
      yOrder - an int scalar value specifying the order of the spline in the y-direction. yOrder must be at least 1. Default: yOrder = 4, implying a tensor-product cubic spline.
    • getYOrder

      public int getYOrder()
      Returns the order of the spline in the y-direction.
      Returns:
      an int scalar containing the order of the spline in the y-direction.
    • setXKnots

      public void setXKnots(double[] xKnots)
      Sets the knot sequences of the spline in the x-direction.
      Parameters:
      xKnots - a double array of size xSplineSpaceDim + xOrder specifying the knot sequences of the spline in the x-direction. Default knot sequences are selected by the class.
    • setYKnots

      public void setYKnots(double[] yKnots)
      Sets the knot sequences of the spline in the y-direction.
      Parameters:
      yKnots - a double array of size ySplineSpaceDim + yOrder specifying the knot sequences of the spline in the y-direction. Default knot sequences are selected by the class.
    • setXWeights

      public void setXWeights(double[] xWeights)
      Sets the weights for the least-squares fit in the x-direction.
      Parameters:
      xWeights - a double array of size xData.length specifying the weights for the least-squares fit in the x-direction. Default: all weights are equal to 1.
    • getXWeights

      public double[] getXWeights()
      Returns the weights for the least-squares fit in the x-direction.
      Returns:
      a double array containing the weights for the least-squares fit in the x-direction.
    • setYWeights

      public void setYWeights(double[] yWeights)
      Sets the weights for the least-squares fit in the y-direction.
      Parameters:
      yWeights - a double array of size yData.length specifying the weights for the least-squares fit in the y-direction. Default: all weights are equal to 1.
    • getYWeights

      public double[] getYWeights()
      Returns the weights for the least-squares fit in the y-direction.
      Returns:
      a double array containing the weights for the least-squares fit in the y-direction.