org.apache.commons.math.analysis.interpolation
public class LoessInterpolator extends Object implements UnivariateRealInterpolator, Serializable
Modifier and Type | Field and Description |
---|---|
private double |
accuracy
If the median residual at a certain robustness iteration
is less than this amount, no more iterations are done.
|
private double |
bandwidth
The bandwidth parameter: when computing the loess fit at
a particular point, this fraction of source points closest
to the current point is taken into account for computing
a least-squares regression.
|
static double |
DEFAULT_ACCURACY
Default value for accuracy.
|
static double |
DEFAULT_BANDWIDTH
Default value of the bandwidth parameter.
|
static int |
DEFAULT_ROBUSTNESS_ITERS
Default value of the number of robustness iterations.
|
private int |
robustnessIters
The number of robustness iterations parameter: this many
robustness iterations are done.
|
private static long |
serialVersionUID
serializable version identifier.
|
Constructor and Description |
---|
LoessInterpolator()
Constructs a new
LoessInterpolator
with a bandwidth of DEFAULT_BANDWIDTH ,
DEFAULT_ROBUSTNESS_ITERS robustness iterations
and an accuracy of {#link #DEFAULT_ACCURACY}. |
LoessInterpolator(double bandwidth,
int robustnessIters)
Constructs a new
LoessInterpolator
with given bandwidth and number of robustness iterations. |
LoessInterpolator(double bandwidth,
int robustnessIters,
double accuracy)
Constructs a new
LoessInterpolator
with given bandwidth, number of robustness iterations and accuracy. |
Modifier and Type | Method and Description |
---|---|
private static void |
checkAllFiniteReal(double[] values,
Localizable pattern)
Check that all elements of an array are finite real numbers.
|
private static void |
checkStrictlyIncreasing(double[] xval)
Check that elements of the abscissae array are in a strictly
increasing order.
|
PolynomialSplineFunction |
interpolate(double[] xval,
double[] yval)
Compute an interpolating function by performing a loess fit
on the data at the original abscissae and then building a cubic spline
with a
SplineInterpolator
on the resulting fit. |
private static int |
nextNonzero(double[] weights,
int i)
Returns the smallest index j such that j > i && (j==weights.length || weights[j] != 0)
|
double[] |
smooth(double[] xval,
double[] yval)
Compute a loess fit on the data at the original abscissae.
|
double[] |
smooth(double[] xval,
double[] yval,
double[] weights)
Compute a weighted loess fit on the data at the original abscissae.
|
private static double |
tricube(double x)
Compute the
tricube
weight function
|
private static void |
updateBandwidthInterval(double[] xval,
double[] weights,
int i,
int[] bandwidthInterval)
Given an index interval into xval that embraces a certain number of
points closest to xval[i-1], update the interval so that it embraces
the same number of points closest to xval[i], ignoring zero weights.
|
public static final double DEFAULT_BANDWIDTH
public static final int DEFAULT_ROBUSTNESS_ITERS
public static final double DEFAULT_ACCURACY
private static final long serialVersionUID
private final double bandwidth
private final int robustnessIters
private final double accuracy
public LoessInterpolator()
LoessInterpolator
with a bandwidth of DEFAULT_BANDWIDTH
,
DEFAULT_ROBUSTNESS_ITERS
robustness iterations
and an accuracy of {#link #DEFAULT_ACCURACY}.
See LoessInterpolator(double, int, double)
for an explanation of
the parameters.public LoessInterpolator(double bandwidth, int robustnessIters) throws MathException
LoessInterpolator
with given bandwidth and number of robustness iterations.
Calling this constructor is equivalent to calling {link LoessInterpolator(bandwidth,
robustnessIters, LoessInterpolator.DEFAULT_ACCURACY)
bandwidth
- when computing the loess fit at
a particular point, this fraction of source points closest
to the current point is taken into account for computing
a least-squares regression.
A sensible value is usually 0.25 to 0.5, the default value is
DEFAULT_BANDWIDTH
.robustnessIters
- This many robustness iterations are done.
A sensible value is usually 0 (just the initial fit without any
robustness iterations) to 4, the default value is
DEFAULT_ROBUSTNESS_ITERS
.MathException
- if bandwidth does not lie in the interval [0,1]
or if robustnessIters is negative.LoessInterpolator(double, int, double)
public LoessInterpolator(double bandwidth, int robustnessIters, double accuracy) throws MathException
LoessInterpolator
with given bandwidth, number of robustness iterations and accuracy.bandwidth
- when computing the loess fit at
a particular point, this fraction of source points closest
to the current point is taken into account for computing
a least-squares regression.
A sensible value is usually 0.25 to 0.5, the default value is
DEFAULT_BANDWIDTH
.robustnessIters
- This many robustness iterations are done.
A sensible value is usually 0 (just the initial fit without any
robustness iterations) to 4, the default value is
DEFAULT_ROBUSTNESS_ITERS
.accuracy
- If the median residual at a certain robustness iteration
is less than this amount, no more iterations are done.MathException
- if bandwidth does not lie in the interval [0,1]
or if robustnessIters is negative.LoessInterpolator(double, int)
public final PolynomialSplineFunction interpolate(double[] xval, double[] yval) throws MathException
SplineInterpolator
on the resulting fit.interpolate
in interface UnivariateRealInterpolator
xval
- the arguments for the interpolation pointsyval
- the values for the interpolation pointsMathException
- if some of the following conditions are false:
public final double[] smooth(double[] xval, double[] yval, double[] weights) throws MathException
xval
- the arguments for the interpolation pointsyval
- the values for the interpolation pointsweights
- point weights: coefficients by which the robustness weight of a point is multipliedMathException
- if some of the following conditions are false:
public final double[] smooth(double[] xval, double[] yval) throws MathException
xval
- the arguments for the interpolation pointsyval
- the values for the interpolation pointsMathException
- if some of the following conditions are false:
private static void updateBandwidthInterval(double[] xval, double[] weights, int i, int[] bandwidthInterval)
xval
- arguments arrayweights
- weights arrayi
- the index around which the new interval should be computedbandwidthInterval
- a two-element array {left, right} such that:
(left==0 or xval[i] - xval[left-1] > xval[right] - xval[i])
and also
(right==xval.length-1 or xval[right+1] - xval[i] > xval[i] - xval[left]).
The array will be updated.private static int nextNonzero(double[] weights, int i)
weights
- weights arrayi
- the index from which to start search; must be < weights.lengthprivate static double tricube(double x)
x
- the argumentprivate static void checkAllFiniteReal(double[] values, Localizable pattern) throws MathException
values
- the values arraypattern
- pattern of the error messageMathException
- if one of the values is not a finite real numberprivate static void checkStrictlyIncreasing(double[] xval) throws MathException
xval
- the abscissae arrayMathException
- if the abscissae array
is not in a strictly increasing orderCopyright (c) 2003-2013 Apache Software Foundation