|
JMSLTM Numerical Library 4.0 | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.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 0public 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 |