From a653082b1a79c268638bf7d8f446d1efad8527c7 Mon Sep 17 00:00:00 2001
From: Jesper Andersson <jesper@fmrib.ox.ac.uk>
Date: Mon, 15 Jun 2009 17:14:14 +0000
Subject: [PATCH] Small change to how Hessian is updated when lambda increases
 in levmar

---
 nonlin.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/nonlin.cpp b/nonlin.cpp
index ed5be3a..e738af8 100644
--- a/nonlin.cpp
+++ b/nonlin.cpp
@@ -309,7 +309,8 @@ NonlinOut levmar(const NonlinParam& p, const NonlinCF& cfo)
     }
     for (int i=1; i<=p.NPar(); i++) {                         // Nudge it
       if (p.GaussNewtonType() == LM_LM) {                     // If Levenberg-Marquardt
-        H->AddTo(i,i,(p.Lambda()-olambda)*H->Peek(i,i));
+        // H->AddTo(i,i,(p.Lambda()-olambda)*H->Peek(i,i));
+        H->Set(i,i,((1.0+p.Lambda())/(1.0+olambda))*H->Peek(i,i));
       }
       else if (p.GaussNewtonType() == LM_L) {                // If Levenberg
         H->AddTo(i,i,p.Lambda()-olambda);             
-- 
GitLab