public class RadialBasis extends Object implements Serializable, Cloneable
RadialBasis computes a least-squares fit to scattered data in \( {\bf R}^d\), where d is the dimension. More precisely, we are given data points $$x_0,\ldots,x_{n-1}\in{\bf R}^d $$ and function values $$f_0,\ldots,f_{n-1}\in{\bf R}^1$$
The radial basis fit to the data is a function sF which approximates the above data in the sense that it minimizes the sum-of-squares error
$$\sum_{i=0}^{n-1}w_i\left(F(x_i)-f_i\right)^2 $$where w are the weights. Of course, we must restrict the functional form of F. Here we assume it is a linear combination of radial functions:
$$F(x)\equiv\sum_{j=0}^{m-1}\alpha_j\phi(\|x-c_j\|) $$ The \(c_j\) are the centers.A radial function, \(\phi(r)\), maps \([0,\infty) \) into \({\bf R}^1\). The default radial function is the Hardy multiquadric,
$$\phi(r)\equiv\sqrt{r^2+\delta^2}$$with \(\delta=1\). An alternate radial function is the Gaussian, \(e^{-ax^2}\).
By default, the centers are points in a Faure sequence, scaled to cover the box containing the data.
Two update
methods allow the user to specify weights for each
data point in the approximation scheme. In this way the user can influence
the fit of the radial basis function. For example, if weights are in the
range [0,1] then 0-weighted points are effectively removed from computations
and 1-weighted points will have more influence than any others. When the
number of centers equals the number of data points, the RBF fit will be
"exact", otherwise it will be an approximation (useful for large or noisy
data sets). Provided the ratios of the weights are not too extreme, weights
will not appreciably change the accuracy of the fit to the data, but they
will affect the shape of the approximating function away from the data:
Greater weights result in greater influence at greater distances.
Modifier and Type | Class and Description |
---|---|
static interface |
RadialBasis.Function
Public interface for the user supplied function to the
RadialBasis
object. |
static class |
RadialBasis.Gaussian
The Gaussian basis function, \(e^{-ax^2}\).
|
static class |
RadialBasis.HardyMultiquadric
The Hardy multiquadric basis function, \(\sqrt{r^2+\delta^2}
\).
|
Constructor and Description |
---|
RadialBasis(int nDim,
int nCenters)
Creates a new instance of RadialBasis.
|
Modifier and Type | Method and Description |
---|---|
ANOVA |
getANOVA()
Returns the ANOVA statistics from the linear regression.
|
RadialBasis.Function |
getRadialFunction()
Returns the radial function.
|
double[] |
gradient(double[] x)
Returns the gradient of the radial basis approximation at a point.
|
void |
setRadialFunction(RadialBasis.Function radialFunction)
Sets the radial function.
|
void |
update(double[][] x,
double[] f)
Adds a set of data points, all with weight = 1.
|
void |
update(double[][] x,
double[] f,
double[] w)
Adds a set of data points with user-specified weights.
|
void |
update(double[] x,
double f)
Adds a data point with weight = 1.
|
void |
update(double[] x,
double f,
double w)
Adds a data point with a specified weight.
|
double |
value(double[] x)
Returns the value of the radial basis approximation at a point.
|
double[] |
value(double[][] x)
Returns the value of the radial basis at a point.
|
public RadialBasis(int nDim, int nCenters)
nDim
- an int
specifying the number of dimensions.nCenters
- an int
specifying the number of centers.public void setRadialFunction(RadialBasis.Function radialFunction)
radialFunction
- a RadialBasis.Function
to be used in
the approximation. The default is Hardy
Multiquadric with \(\delta=1\).public RadialBasis.Function getRadialFunction()
RadialBasis.Function
which is the current radial
function.public void update(double[] x, double f)
x
- is a double
array containing the locations of the
data point.f
- is a double
containing the function value at the
data point.public void update(double[] x, double f, double w)
x
- is a double
array containing the locations of the
data point.f
- is a double
containing the function value at the
data point.w
- is a double
containing the weight of this data
point.public void update(double[][] x, double[] f)
x
- is a double
matrix of size n by nDim
containing the locations of the data points for each dimension.f
- is a double
array containing the function values at
the data points.public void update(double[][] x, double[] f, double[] w)
x
- is a double
matrix of size n by nDim
containing the locations of the data points for each dimension.f
- is a double
array containing the function values at
the data points.w
- is a double
array containing the weights associated
with the data points.public double value(double[] x)
x
- is a double
array containing the locations of the
data point at which the approximation is to be computed.double
containing the value of the radial basis
approximation at x.public double[] gradient(double[] x)
x
- is a double
array containing the locations of the
data point at which the approximation's gradient is to be
computed.double
array, of length nDim
containing the value of the gradient of the radial basis
approximation at x.public double[] value(double[][] x)
x
- a double
matrix of size n by nDim
containing the points at which the radial basis is to be
evaluated.double
array giving the value of the radial basis
at the point x
public ANOVA getANOVA()
ANOVA
table and related statisticsLinearRegression
,
ANOVA
Copyright © 2020 Rogue Wave Software. All rights reserved.