|
JMSLTM Numerical Library 4.0 | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectcom.imsl.math.NonlinLeastSquares
Nonlinear least squares.
NonlinLeastSquares is based on the MINPACK routine
LMDIF by Moré et al. (1980). It uses a modified Levenberg-Marquardt
method to solve nonlinear least squares problems. The problem is stated as
follows:
![]()
where
,
,
and
is the i-th component function of
F(x). From a current point, the algorithm uses the trust
region approach:
![]()
subject to
![]()
to get a new point
, which is computed as
![]()
where
if
and
otherwise.
and
are the function values and the Jacobian
evaluated at the current point
. This procedure is
repeated until the stopping criteria are satisfied. For more details, see
Levenberg (1944), Marquardt (1963), or Dennis and Schnabel (1983, Chapter 10).
A finite-difference method is used to estimate the Jacobian when the
user supplied function, f, defines the least-squares problem.
Whenever the exact Jacobian can be easily provided, f should
implement NonlinLeastSquares.Jacobian.
| Nested Class Summary | |
static class |
NonlinLeastSquares.FalseConvergenceException
The iterates appear to be converging to a non-critical point. |
static interface |
NonlinLeastSquares.Function
Public interface for the user supplied function to the NonlinLeastSquares object. |
static interface |
NonlinLeastSquares.Jacobian
Public interface for the user supplied function to the NonlinLeastSquares object. |
static class |
NonlinLeastSquares.RelativeFunctionConvergenceException
The scaled and predicted reductions in the function are less than or equal to the relative function convergence tolerance. |
static class |
NonlinLeastSquares.StepMaxException
Either the function is unbounded below, has a finite asymptote in some direction, or the maximum stepsize is too small. |
static class |
NonlinLeastSquares.StepToleranceException
Various possible errors involving the step tolerance. |
static class |
NonlinLeastSquares.TooManyIterationsException
Too many iterations. |
| Constructor Summary | |
NonlinLeastSquares(int m,
int n)
Creates an object to solve a nonlinear least squares problem. |
|
| Method Summary | |
int |
getErrorStatus()
Get information about the performance of NonlinLeastSquares. |
void |
setAbsoluteTolerance(double absoluteTolerance)
Set the absolute function tolerance. |
void |
setDigits(int ngood)
Set the number of good digits in the function. |
void |
setFalseConvergenceTolerance(double falseConvergenceTolerance)
Set the false convergence tolerance. |
void |
setFscale(double[] fscale)
Set the diagonal scaling matrix for the functions. |
void |
setGradientTolerance(double gradientTolerance)
Set the gradient tolerance used to compute the gradient. |
void |
setGuess(double[] xguess)
Set the initial guess of the minimum point of the input function. |
void |
setInitialTrustRegion(double initialTrustRegion)
Set the initial trust region radius. |
void |
setMaximumStepsize(double maximumStepsize)
Set the maximum allowable stepsize to use. |
void |
setMaxIterations(int maxIterations)
Set the maximum number of iterations allowed. |
void |
setRelativeTolerance(double relativeTolerance)
Set the relative function tolerance. |
void |
setStepTolerance(double stepTolerance)
Set the step tolerance used to step between two points. |
void |
setXscale(double[] xscale)
Set the diagonal scaling matrix for the variables. |
double[] |
solve(NonlinLeastSquares.Function F)
Solve a nonlinear least-squares problem using a modified Levenberg-Marquardt algorithm and a Jacobian. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
public NonlinLeastSquares(int m,
int n)
m - is the number of functionsn - is the number of variables. n must be less
than or equal to m.| Method Detail |
public int getErrorStatus()
int specifying information about convergence.
| value | meaning | 0 | All convergence tests were met. | 1 | Scaled step tolerance was satisfied. The current point may be an approximate local solution, or the algorithm is making very slow progress and is not near a solution, or StepTolerance is too big. | 2 | Scaled actual and predicted reductions in the function are less than or equal to the relative function convergence tolerance RelativeTolerance. | 3 | Iterates appear to be converging to a noncritical point. Incorrect gradient information, a discontinuous function, or stopping tolerances being too tight may be the cause. | 4 | Five consecutive steps with the maximum stepsize have been taken. Either the function is unbounded below, or has a finite asymptote in some direction, or the maximum stepsize is too small. |
setRelativeTolerance(double),
setStepTolerance(double)public void setAbsoluteTolerance(double absoluteTolerance)
absoluteTolerance - a double scalar value specifying the absolute function
tolerance
IllegalArgumentException - is thrown if absoluteTolerance is less than or equal to 0public void setDigits(int ngood)
ngood - an int specifying the number of good digits in
the user supplied function which defines the least-squares
problem
IllegalArgumentException - is thrown if ngood is less than or equal to 0public void setFalseConvergenceTolerance(double falseConvergenceTolerance)
falseConvergenceTolerance - a double scalar value specifying the false convergence
tolerance
IllegalArgumentException - is thrown if falseConvergenceTolerance is less than or equal to 0public void setFscale(double[] fscale)
fscale - a double array specifying the diagonal
scaling matrix for the functions
IllegalArgumentException - is thrown if any of the elements
of fscale is less than or equal to 0public void setGradientTolerance(double gradientTolerance)
gradientTolerance - a double specifying the gradient tolerance used
to compute the gradient
IllegalArgumentException - is thrown if gradientTolerance is less than or equal to 0public void setGuess(double[] xguess)
xguess - a double array specifying the initial guess of the
minimum point of the input functionpublic void setInitialTrustRegion(double initialTrustRegion)
initialTrustRegion - a double scalar value specifying the initial trust
region radius
IllegalArgumentException - is thrown if initialTrustRegion is less than or equal to 0public void setMaximumStepsize(double maximumStepsize)
maximumStepsize - a nonnegative double value specifying the maximum allowable
stepsize
IllegalArgumentException - is thrown if maximumStepsize is less than or equal to 0public void setMaxIterations(int maxIterations)
maxIterations - an int specifying the maximum number of
iterations allowed
IllegalArgumentException - is thrown if maxIterations is less than or equal to 0public void setRelativeTolerance(double relativeTolerance)
relativeTolerance - a double scalar value specifying the relative function
tolerance
IllegalArgumentException - is thrown if relativeTolerance is less than or equal to 0public void setStepTolerance(double stepTolerance)
stepTolerance - a double scalar value specifying the step tolerance used
to step between two points
IllegalArgumentException - is thrown if stepTolerance is less than or equal to 0public void setXscale(double[] xscale)
xscale - a double array specifying the diagonal
scaling matrix for the variables
IllegalArgumentException - is thrown if any of the elements
of xscale is less than or equal to 0
public double[] solve(NonlinLeastSquares.Function F)
throws NonlinLeastSquares.TooManyIterationsException
F - User supplied function that defines the least-squares problem.
If F implements Jacobian then its Jacobian is used.
Otherwise, a finite difference Jacobian is used.
double array of length n containing the approximate solution
NonlinLeastSquares.TooManyIterationsException - is thrown if the number of iterations
exceeds MaxIterations. MaxIterations is set to 100 by
default.
|
JMSLTM Numerical Library 4.0 | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||