diff options
author | Thomas Capricelli <orzel@freehackers.org> | 2009-09-28 04:13:57 +0200 |
---|---|---|
committer | Thomas Capricelli <orzel@freehackers.org> | 2009-09-28 04:13:57 +0200 |
commit | 7968737247b668aade639fe8e4198de978a167dc (patch) | |
tree | deb96bad45b2324b725297f144a69e368a8fc9bb /unsupported/Eigen | |
parent | d9120345659fabbb14342cd2a4ced0e541d1076e (diff) |
fix tests : we perform slightly worse because we do use one more function
evaluation in our numericaldiff than what (c)minpack did
Diffstat (limited to 'unsupported/Eigen')
-rw-r--r-- | unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h | 12 | ||||
-rw-r--r-- | unsupported/Eigen/src/NumericalDiff/NumericalDiff.h | 4 |
2 files changed, 9 insertions, 7 deletions
diff --git a/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h b/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h index 4e0565237..f541c385b 100644 --- a/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h +++ b/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h @@ -55,7 +55,7 @@ public: ); static Status lmdif1( - FunctorType &_functor, + FunctorType &functor, Matrix< Scalar, Dynamic, 1 > &x, int *nfev, const Scalar tol = ei_sqrt(epsilon<Scalar>()) @@ -200,9 +200,13 @@ LevenbergMarquardt<FunctorType,Scalar>::minimizeOneStep( /* calculate the jacobian matrix. */ - if (functor.df(x, fjac) < 0) + int df_ret = functor.df(x, fjac); + if (df_ret<0) return UserAsked; - ++njev; + if (df_ret>0) + // numerical diff, we evaluated the function df_ret times + nfev += df_ret; + else njev++; /* compute the qr factorization of the jacobian. */ @@ -702,10 +706,8 @@ LevenbergMarquardt<FunctorType,Scalar>::lmdif1( lm.parameters.maxfev = 200*(n+1); Status info = Status(lm.minimize(x)); - if (nfev) * nfev = lm.nfev; - return info; } diff --git a/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h b/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h index 276b315f8..dcd435864 100644 --- a/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +++ b/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h @@ -74,6 +74,7 @@ public: val1.resize(Functor::values()); val2.resize(Functor::values()); + // initialization switch(mode) { case Forward: // compute f(x) @@ -86,8 +87,7 @@ public: assert(false); }; - /* Function Body */ - + // Function Body for (int j = 0; j < n; ++j) { h = eps * ei_abs(x[j]); if (h == 0.) { |