diff --git a/web/app/math/optim.js b/web/app/math/optim.js index 3ebcbb19..efbabb8d 100644 --- a/web/app/math/optim.js +++ b/web/app/math/optim.js @@ -326,7 +326,7 @@ var dog_leg = function (subsys, rough) { var g_inf = n.norminf(g); var fx_inf = n.norminf(fx); - var iterLimit = rough ? 100 : 50000; + var iterLimit = rough ? 100 : 500; var divergenceLimit = 1e6 * (err + 1e6); var delta = 10; @@ -339,6 +339,8 @@ var dog_leg = function (subsys, rough) { if (fx_inf <= tolf) { returnCode = SUCCESS; + } else if (g_inf <= tolg) { + returnCode = SUCCESS; } else if (iter >= iterLimit) { returnCode = ITER_LIMIT; } else if (delta <= tolx * (tolx + n.norm2(x))) { @@ -440,7 +442,7 @@ var dog_leg = function (subsys, rough) { } //log.push([stepKind,err, delta,rho]); - const step = () => { + if (acceptCandidate) { x = n.clone(x_new); J = n.clone(J_new); fx = n.clone(fx_new); @@ -451,25 +453,12 @@ var dog_leg = function (subsys, rough) { // get infinity norms g_inf = n.norminf(g); fx_inf = n.norminf(fx); - }; - - if (acceptCandidate) { - step(); - } - - if (g_inf <= tolg) { - for (let i = 0; i < x_new.length; ++i) { - x_new[i] += 1; - } - err_new = subsys.calcResidual(fx_new); - step(); } iter++; } //log.push(returnCode); //window.___log(log); - console.log("DOGLE: " + iter) return _result(iter, err, returnCode); };