aboutsummaryrefslogtreecommitdiff
path: root/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
diff options
context:
space:
mode:
authorMiao Wang <miaowang@google.com>2017-03-08 17:23:02 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-03-08 17:23:02 +0000
commit4b1361e1aca4189cfba2bd2c0fc87d593da76728 (patch)
tree0488797fc544fe977bec6418c73445759f052482 /unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
parent29a3140b512228375adb9f24414fb2996c2889e6 (diff)
parentd3ea081e6f4a81b7086df9f35f08f25e54f20863 (diff)
downloadeigen-4b1361e1aca4189cfba2bd2c0fc87d593da76728.tar.gz
Merge "Rebase Eigen to 3.3.3." am: 7de1f32623 am: 6688b8b260
am: d3ea081e6f Change-Id: Id61115ffaa6ad3c134b182547652c7248e8aa5cd
Diffstat (limited to 'unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h')
-rw-r--r--unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h31
1 files changed, 25 insertions, 6 deletions
diff --git a/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h b/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
index 51dd1d3c4..995427978 100644
--- a/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
+++ b/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
@@ -115,8 +115,7 @@ class LevenbergMarquardt : internal::no_assignment_operator
typedef typename FunctorType::JacobianType JacobianType;
typedef typename JacobianType::Scalar Scalar;
typedef typename JacobianType::RealScalar RealScalar;
- typedef typename JacobianType::Index Index;
- typedef typename QRSolver::Index PermIndex;
+ typedef typename QRSolver::StorageIndex PermIndex;
typedef Matrix<Scalar,Dynamic,1> FVectorType;
typedef PermutationMatrix<Dynamic,Dynamic> PermutationType;
public:
@@ -144,11 +143,13 @@ class LevenbergMarquardt : internal::no_assignment_operator
/** Sets the default parameters */
void resetParameters()
- {
+ {
+ using std::sqrt;
+
m_factor = 100.;
m_maxfev = 400;
- m_ftol = std::sqrt(NumTraits<RealScalar>::epsilon());
- m_xtol = std::sqrt(NumTraits<RealScalar>::epsilon());
+ m_ftol = sqrt(NumTraits<RealScalar>::epsilon());
+ m_xtol = sqrt(NumTraits<RealScalar>::epsilon());
m_gtol = 0. ;
m_epsfcn = 0. ;
}
@@ -174,6 +175,24 @@ class LevenbergMarquardt : internal::no_assignment_operator
/** Use an external Scaling. If set to true, pass a nonzero diagonal to diag() */
void setExternalScaling(bool value) {m_useExternalScaling = value; }
+ /** \returns the tolerance for the norm of the solution vector */
+ RealScalar xtol() const {return m_xtol; }
+
+ /** \returns the tolerance for the norm of the vector function */
+ RealScalar ftol() const {return m_ftol; }
+
+ /** \returns the tolerance for the norm of the gradient of the error vector */
+ RealScalar gtol() const {return m_gtol; }
+
+ /** \returns the step bound for the diagonal shift */
+ RealScalar factor() const {return m_factor; }
+
+ /** \returns the error precision */
+ RealScalar epsilon() const {return m_epsfcn; }
+
+ /** \returns the maximum number of function evaluation */
+ Index maxfev() const {return m_maxfev; }
+
/** \returns a reference to the diagonal of the jacobian */
FVectorType& diag() {return m_diag; }
@@ -285,7 +304,7 @@ LevenbergMarquardt<FunctorType>::minimizeInit(FVectorType &x)
// m_fjac.reserve(VectorXi::Constant(n,5)); // FIXME Find a better alternative
if (!m_useExternalScaling)
m_diag.resize(n);
- eigen_assert( (!m_useExternalScaling || m_diag.size()==n) || "When m_useExternalScaling is set, the caller must provide a valid 'm_diag'");
+ eigen_assert( (!m_useExternalScaling || m_diag.size()==n) && "When m_useExternalScaling is set, the caller must provide a valid 'm_diag'");
m_qtf.resize(n);
/* Function Body */