Loading js/numbers/numbers.calculus.extra.js +22 −21 Original line number Diff line number Diff line Loading @@ -198,17 +198,12 @@ numbers.calculus.GaussNewton = function(v,n,r,dr,eps,w){ */ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ // divide delta by 2 var D_DIV = 1 // degrees var STEP_SIZE_LIMIT = 10 console.log("Will divide delta by "+D_DIV) var epsilon = eps || 1e-8 //var limit = 1000 var limit = 50 var delta_divider = D_DIV var stop = false var counter = 0 Loading Loading @@ -236,10 +231,6 @@ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ rs0.push(r(i,v0)) rs1.push(r(i,v1)) diff.push(r(i,v1)-r(i,v0)) if (diff[i]>STEP_SIZE_LIMIT){ reiterate = true break } } console.log("residuals old:") Loading @@ -249,9 +240,25 @@ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ console.log("difference:") console.log(diff) if (!reiterate){ var max = Math.max(...diff) var sscale = 0; if (max>STEP_SIZE_LIMIT){ console.log("LAT or LON EXCEEDED STEP SIZE") sscale = STEP_SIZE_LIMIT/max; } if ((v1[2]-v0[2])>STEP_SIZE_LIMIT){ console.log("DELTA HEADING EXCEEDED STEP SIZE") sscale = STEP_SIZE_LIMIT/(v1[2]-v0[2]); } delta_divider = D_DIV if (sscale!=0){ for(var i=0;i<n;i++){ v1[i] = v0[i] + diff[i]*sscale } } var s0 = sigma(v0,n,r) var s1 = sigma(v1,n,r) Loading @@ -261,12 +268,6 @@ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ } v0 = v1 }else{ delta_divider *= 2 console.log("REITERATE WITH A SMALLER JUMP") } } Loading Loading @@ -311,7 +312,7 @@ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ var res = [] for(var i=0;i<v.length;i++){ res[i] = v[i]-delta[i][0]/delta_divider res[i] = v[i]-delta[i][0] } return res Loading Loading
js/numbers/numbers.calculus.extra.js +22 −21 Original line number Diff line number Diff line Loading @@ -198,17 +198,12 @@ numbers.calculus.GaussNewton = function(v,n,r,dr,eps,w){ */ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ // divide delta by 2 var D_DIV = 1 // degrees var STEP_SIZE_LIMIT = 10 console.log("Will divide delta by "+D_DIV) var epsilon = eps || 1e-8 //var limit = 1000 var limit = 50 var delta_divider = D_DIV var stop = false var counter = 0 Loading Loading @@ -236,10 +231,6 @@ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ rs0.push(r(i,v0)) rs1.push(r(i,v1)) diff.push(r(i,v1)-r(i,v0)) if (diff[i]>STEP_SIZE_LIMIT){ reiterate = true break } } console.log("residuals old:") Loading @@ -249,9 +240,25 @@ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ console.log("difference:") console.log(diff) if (!reiterate){ var max = Math.max(...diff) var sscale = 0; if (max>STEP_SIZE_LIMIT){ console.log("LAT or LON EXCEEDED STEP SIZE") sscale = STEP_SIZE_LIMIT/max; } if ((v1[2]-v0[2])>STEP_SIZE_LIMIT){ console.log("DELTA HEADING EXCEEDED STEP SIZE") sscale = STEP_SIZE_LIMIT/(v1[2]-v0[2]); } delta_divider = D_DIV if (sscale!=0){ for(var i=0;i<n;i++){ v1[i] = v0[i] + diff[i]*sscale } } var s0 = sigma(v0,n,r) var s1 = sigma(v1,n,r) Loading @@ -261,12 +268,6 @@ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ } v0 = v1 }else{ delta_divider *= 2 console.log("REITERATE WITH A SMALLER JUMP") } } Loading Loading @@ -311,7 +312,7 @@ numbers.calculus.GaussNewton_forHeading = function(v,n,r,dr,eps,w){ var res = [] for(var i=0;i<v.length;i++){ res[i] = v[i]-delta[i][0]/delta_divider res[i] = v[i]-delta[i][0] } return res Loading