From 8c65bec480e4f370f31521435c1cff3a32cb57aa Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 14 Nov 2011 18:40:54 +0000 Subject: [PATCH] + prevent possibly infinite loop in the Levenberg-Marquardt solver git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5132 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d --- src/Mod/Sketcher/App/freegcs/GCS.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/App/freegcs/GCS.cpp b/src/Mod/Sketcher/App/freegcs/GCS.cpp index db0ac6f35..5ca29a71c 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/freegcs/GCS.cpp @@ -665,7 +665,8 @@ int System::solve_LM(SubSystem* subsys) mu = tau * A.diagonal().lpNorm(); // determine increment using adaptive damping - while (1) { + int k=0; + while (k < 50) { // augment normal equations A = A+uI for (int i=0; i < xsize; ++i) A(i,i) += mu; @@ -716,6 +717,12 @@ int System::solve_LM(SubSystem* subsys) nu*=2.0; for (int i=0; i < xsize; ++i) // restore diagonal J^T J entries A(i,i) = diag_A(i); + + k++; + } + if (k > 50) { + stop = 7; + break; } }