From 7ba9dc07edb356d1a7d81bf4ef62378099a509ca Mon Sep 17 00:00:00 2001 From: Thomas Capricelli Date: Wed, 27 Jan 2010 09:01:13 +0100 Subject: port ei_rwupdt to c++, and misc cleaning --- .../Eigen/src/NonLinearOptimization/LevenbergMarquardt.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h') diff --git a/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h b/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h index adbb3c835..cda6ef74b 100644 --- a/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +++ b/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h @@ -289,7 +289,6 @@ LevenbergMarquardt::minimizeOneStep( if (mode != 2) diag = diag.cwiseMax(wa2); - /* beginning of the inner loop. */ do { /* determine the levenberg-marquardt parameter. */ @@ -374,9 +373,9 @@ LevenbergMarquardt::minimizeOneStep( return XtolTooSmall; if (gnorm <= epsilon()) return GtolTooSmall; - /* end of the inner loop. repeat if iteration unsuccessful. */ + } while (ratio < Scalar(1e-4)); - /* end of the outer loop. */ + return Running; } @@ -468,7 +467,7 @@ LevenbergMarquardt::minimizeOptimumStorageOneStep( int rownb = 2; for (i = 0; i < m; ++i) { if (functor.df(x, wa3, rownb) < 0) return UserAsked; - ei_rwupdt(n, fjac.data(), fjac.rows(), wa3.data(), qtf.data(), fvec[i]); + ei_rwupdt(fjac, wa3, qtf, fvec[i]); ++rownb; } ++njev; @@ -485,7 +484,7 @@ LevenbergMarquardt::minimizeOptimumStorageOneStep( if (sing) { wa2 = fjac.colwise().blueNorm(); // TODO We have no unit test covering this code path, do not modify - // before it is carefully tested + // until it is carefully tested ColPivHouseholderQR qrfac(fjac); fjac = qrfac.matrixQR(); wa1 = fjac.diagonal(); @@ -538,7 +537,6 @@ LevenbergMarquardt::minimizeOptimumStorageOneStep( if (mode != 2) diag = diag.cwiseMax(wa2); - /* beginning of the inner loop. */ do { /* determine the levenberg-marquardt parameter. */ @@ -623,9 +621,9 @@ LevenbergMarquardt::minimizeOptimumStorageOneStep( return XtolTooSmall; if (gnorm <= epsilon()) return GtolTooSmall; - /* end of the inner loop. repeat if iteration unsuccessful. */ + } while (ratio < Scalar(1e-4)); - /* end of the outer loop. */ + return Running; } -- cgit v1.2.3