public abstract class Spline2D extends Object implements Serializable, Cloneable
The simplest method of obtaining multivariate interpolation and approximation functions is to take univariate methods and form a multivariate method via tensor products. In the case of two-dimensional spline interpolation, the derivation proceeds as follows: Let \(t_x\) be a knot sequence for splines of order \(k_x\), and \(t_y\) be a knot sequence for splines of order \(k_y\). Let \(N_x + k_x\) be the length of \(t_x\), and \(N_y + k_x\) be the length of \(t_y\). Then, the tensor-product spline has the following form: $$\sum\limits_{m = 0}^{N_y - 1} {\sum\limits_{n = 0}^{N_x - 1} {c_{nm} B_{n,k_x ,t_x } \left( x \right)B_{m,k_y ,t_y } \left( y \right)} }$$ Given two sets of points $$\left\{ {x_i } \right\}_{i = 1}^{N_x }$$ and $$\left\{ {y_j } \right\}_{j = 1}^{N_y }$$ for which the corresponding univariate interpolation problem can be solved, the tensor-product interpolation problem finds the coefficients \(c_{nm}\) so that $$\sum\limits_{m = 0}^{N_y - 1} {\sum\limits_{n = 0}^{N_x - 1} {c_{nm} B_{n,k_x ,t_x } \left( {x_i } \right)B_{m,k_y ,t_y } \left( {y_j } \right)} } = f_{ij}$$ This problem can be solved efficiently by repeatedly solving univariate interpolation problems as described in de Boor (1978, p. 347).
Constructor and Description |
---|
Spline2D() |
Modifier and Type | Method and Description |
---|---|
double[][] |
derivative(double[] xVec,
double[] yVec,
int xPartial,
int yPartial)
Returns the values of the partial derivative of the tensor-product spline
of an array of points.
|
double |
derivative(double x,
double y,
int xPartial,
int yPartial)
Returns the value of the partial derivative of the tensor-product spline
at the point (x, y).
|
double[][] |
getCoefficients()
Returns the coefficients for the tensor-product spline.
|
double[] |
getXKnots()
Returns the knot sequences in the x-direction.
|
double[] |
getYKnots()
Returns the knot sequences in the y-direction.
|
double |
integral(double a,
double b,
double c,
double d)
Returns the value of an integral of a tensor-product spline on a
rectangular domain.
|
double[][] |
value(double[] xVec,
double[] yVec)
Returns the values of the tensor-product spline of an array of points.
|
double |
value(double x,
double y)
Returns the value of the tensor-product spline at the point (x, y).
|
public double[] getXKnots()
double
array containing the knot
sequences of the spline in the x-direction.public double[] getYKnots()
double
array containing the knot
sequences of the spline in the y-direction.public double[][] getCoefficients()
double
matrix containing the coefficients.public double value(double x, double y)
x
- a double
scalar specifying the x-coordinate of
the evaluation point for the tensor-product spline.y
- a double
scalar specifying the y-coordinate of
the evaluation point for the tensor-product spline.double
scalar containing the value of the
tensor-product spline.public double derivative(double x, double y, int xPartial, int yPartial)
x
- a double
scalar specifying the x-coordinate of
the evaluation point for the tensor-product spline.y
- a double
scalar specifying the y-coordinate of
the evaluation point for the tensor-product spline.xPartial
- an int
scalar specifying the x-partial derivative.yPartial
- an int
scalar specifying the y-partial derivative.double
scalar containing the value of the
partial derivative $$\frac{{\partial ^{i + j} s}}{{\partial ^i x\,\,\partial ^j y}}$$
where i = xPartial
and j =
yPartial
, at (x, y).public double[][] value(double[] xVec, double[] yVec)
xVec
- a double
array specifying the
x-coordinates at which the spline is to be evaluated.yVec
- a double
array specifying the
y-coordinates at which the spline is to be evaluated.double
matrix containing the
values evaluated.public double[][] derivative(double[] xVec, double[] yVec, int xPartial, int yPartial)
xVec
- a double
array specifying the
x-coordinates at which the spline is to be evaluated.yVec
- a double
array specifying the
y-coordinates at which the spline is to be evaluated.xPartial
- an int
scalar specifying the x-partial derivative.yPartial
- an int
scalar specifying the y-partial derivative.double
matrix containing the values of
the partial derivatives $$\frac{{\partial ^{i + j} s}}{{\partial ^i x\,\,\partial ^j y}}$$
where i = xPartial
and j =
yPartial
, at each (x, y).public double integral(double a, double b, double c, double d)
If s is the spline, then the integral
method returns
$$\int_a^b {\int_c^d {s\left( {x,y} \right)} } dydx$$
This method uses the (univariate integration) identity (22) in de Boor
(1978, p. 151)
$$\int_{t_0 }^x {\sum\limits_{i = 0}^{n - 1} {\alpha _i } } B_{i,k} \left( \tau \right)d\tau = \sum\limits_{i = 0}^{r - 1} {\left[ {\sum\limits_{j = 0}^i {\alpha _j \frac{{t_{j + k} - t_j }}{k}} } \right]} B_{i,k + 1} \left( x \right)$$
where \(t_0 \le x \le t_r\).
It assumes (for all knot sequences) that the first and last k knots are stacked, that is, \(t_0 = \ldots = t_{k-1}\) and \(t_n = \ldots = t_{n+k-1}\) , where k is the order of the spline in the x or y direction.
a
- a double
specifying the lower limit for the
first variable of the tensor-product spline.b
- a double
specifying the upper limit for the
first variable of the tensor-product spline.c
- a double
specifying the lower limit for the
second variable of the tensor-product spline.d
- a double
specifying the upper limit for the
second variable of the tensor-product spline.double
, the integral of the tensor-product
spline over the rectangle [a, b]
by
[c, d]
.Copyright © 2020 Rogue Wave Software. All rights reserved.