public class LoessInterpolator extends java.lang.Object implements UnivariateInterpolator, java.io.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)
Construct a new
LoessInterpolator
with given bandwidth and number of robustness iterations. |
LoessInterpolator(double bandwidth,
int robustnessIters,
double accuracy)
Construct a new
LoessInterpolator
with given bandwidth, number of robustness iterations and accuracy. |
| Modifier and Type | Method and Description |
|---|---|
private static void |
checkAllFiniteReal(double[] values)
Check that all elements of an array are finite real numbers.
|
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)
Return 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)
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.LoessInterpolator(double, int, double)public LoessInterpolator(double bandwidth,
int robustnessIters,
double accuracy)
throws OutOfRangeException,
NotPositiveException
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.OutOfRangeException - if bandwidth does not lie in the interval [0,1].NotPositiveException - if robustnessIters is negative.LoessInterpolator(double, int)public final PolynomialSplineFunction interpolate(double[] xval, double[] yval) throws NonMonotonicSequenceException, DimensionMismatchException, NoDataException, NotFiniteNumberException, NumberIsTooSmallException
SplineInterpolator
on the resulting fit.interpolate in interface UnivariateInterpolatorxval - the arguments for the interpolation pointsyval - the values for the interpolation pointsNonMonotonicSequenceException - if xval not sorted in
strictly increasing order.DimensionMismatchException - if xval and yval have
different sizes.NoDataException - if xval or yval has zero size.NotFiniteNumberException - if any of the arguments and values are
not finite real numbers.NumberIsTooSmallException - if the bandwidth is too small to
accomodate the size of the input data (i.e. the bandwidth must be
larger than 2/n).public final double[] smooth(double[] xval,
double[] yval,
double[] weights)
throws NonMonotonicSequenceException,
DimensionMismatchException,
NoDataException,
NotFiniteNumberException,
NumberIsTooSmallException
xval - Arguments for the interpolation points.yval - Values for the interpolation points.weights - point weights: coefficients by which the robustness weight
of a point is multiplied.NonMonotonicSequenceException - if xval not sorted in
strictly increasing order.DimensionMismatchException - if xval and yval have
different sizes.NoDataException - if xval or yval has zero size.NotFiniteNumberException - if any of the arguments and values are
not finite real numbers.NumberIsTooSmallException - if the bandwidth is too small to
accomodate the size of the input data (i.e. the bandwidth must be
larger than 2/n).public final double[] smooth(double[] xval,
double[] yval)
throws NonMonotonicSequenceException,
DimensionMismatchException,
NoDataException,
NotFiniteNumberException,
NumberIsTooSmallException
xval - the arguments for the interpolation pointsyval - the values for the interpolation pointsNonMonotonicSequenceException - if xval not sorted in
strictly increasing order.DimensionMismatchException - if xval and yval have
different sizes.NoDataException - if xval or yval has zero size.NotFiniteNumberException - if any of the arguments and values are
not finite real numbers.NumberIsTooSmallException - if the bandwidth is too small to
accomodate the size of the input data (i.e. the bandwidth must be
larger than 2/n).private static void updateBandwidthInterval(double[] xval,
double[] weights,
int i,
int[] bandwidthInterval)
xval[i-1], update the interval so that it
embraces the same number of points closest to xval[i],
ignoring zero weights.xval - Arguments array.weights - Weights array.i - Index around which the new interval should be computed.bandwidthInterval - a two-element array {left, right} such that:
(left==0 or xval[i] - xval[left-1] > xval[right] - xval[i])
and
(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)
j such that
j > i && (j == weights.length || weights[j] != 0).weights - Weights array.i - Index from which to start search.private static double tricube(double x)
x - Argument.(1 - |x|3)3 for |x| < 1, 0 otherwise.private static void checkAllFiniteReal(double[] values)
values - Values array.NotFiniteNumberException - if one of the values is not a finite real number.Copyright (c) 2003-2015 Apache Software Foundation