@Deprecated public class LevenbergMarquardtEstimator extends AbstractEstimator implements java.io.Serializable
This implementation should work even for over-determined systems (i.e. systems having more variables than equations). Over-determined systems are solved by ignoring the variables which have the smallest impact according to their jacobian column norm. Only the rank of the matrix and some loop bounds are changed to implement this.
The resolution engine is a simple translation of the MINPACK lmder routine with minor changes. The changes include the over-determined resolution and the Q.R. decomposition which has been rewritten following the algorithm described in the P. Lascaux and R. Theodor book Analyse numérique matricielle appliquée à l'art de l'ingénieur, Masson 1986.
The authors of the original fortran version are:
Minpack Copyright Notice (1999) University of Chicago. All rights reserved |
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
|
DEFAULT_MAX_COST_EVALUATIONS
Constructor and Description |
---|
LevenbergMarquardtEstimator()
Deprecated.
Build an estimator for least squares problems.
|
Modifier and Type | Method and Description |
---|---|
void |
estimate(EstimationProblem problem)
Deprecated.
Solve an estimation problem using the Levenberg-Marquardt algorithm.
|
void |
setCostRelativeTolerance(double costRelativeTolerance)
Deprecated.
Set the desired relative error in the sum of squares.
|
void |
setInitialStepBoundFactor(double initialStepBoundFactor)
Deprecated.
Set the positive input variable used in determining the initial step bound.
|
void |
setOrthoTolerance(double orthoTolerance)
Deprecated.
Set the desired max cosine on the orthogonality.
|
void |
setParRelativeTolerance(double parRelativeTolerance)
Deprecated.
Set the desired relative error in the approximate solution parameters.
|
getChiSquare, getCostEvaluations, getCovariances, getJacobianEvaluations, getRMS, guessParametersErrors, setMaxCostEval
public LevenbergMarquardtEstimator()
The default values for the algorithm settings are:
initial step bound factor
: 100.0maximal cost evaluations
: 1000cost relative tolerance
: 1.0e-10parameters relative tolerance
: 1.0e-10orthogonality tolerance
: 1.0e-10public void setInitialStepBoundFactor(double initialStepBoundFactor)
initialStepBoundFactor
- initial step bound factorestimate(org.apache.commons.math.estimation.EstimationProblem)
public void setCostRelativeTolerance(double costRelativeTolerance)
costRelativeTolerance
- desired relative error in the sum of squaresestimate(org.apache.commons.math.estimation.EstimationProblem)
public void setParRelativeTolerance(double parRelativeTolerance)
parRelativeTolerance
- desired relative error
in the approximate solution parametersestimate(org.apache.commons.math.estimation.EstimationProblem)
public void setOrthoTolerance(double orthoTolerance)
orthoTolerance
- desired max cosine on the orthogonality
between the function vector and the columns of the jacobianestimate(org.apache.commons.math.estimation.EstimationProblem)
public void estimate(EstimationProblem problem) throws EstimationException
The algorithm used is a modified Levenberg-Marquardt one, based
on the MINPACK lmder
routine. The algorithm settings must have been set up before this method
is called with the setInitialStepBoundFactor(double)
,
AbstractEstimator.setMaxCostEval(int)
, setCostRelativeTolerance(double)
,
setParRelativeTolerance(double)
and setOrthoTolerance(double)
methods.
If these methods have not been called, the default values set up by the
constructor
will be used.
The authors of the original fortran function are:
Luc Maisonobe did the Java translation.
estimate
in interface Estimator
estimate
in class AbstractEstimator
problem
- estimation problem to solveEstimationException
- if convergence cannot be
reached with the specified algorithm settings or if there are more variables
than equationssetInitialStepBoundFactor(double)
,
setCostRelativeTolerance(double)
,
setParRelativeTolerance(double)
,
setOrthoTolerance(double)
"Copyright © 2010 - 2020 Adobe Systems Incorporated. All Rights Reserved"