This commit is contained in:
Val Erastov 2015-03-18 01:39:04 -07:00
parent a07b4ac99d
commit 7ec94c0bb1

View file

@ -258,8 +258,10 @@ optim.inv = function inv(x) {
}
optim.dog_leg = function(subsys, rough) {
rough= true
var tolg=1e-80, tolx=1e-80, tolf=1e-10;
rough = true
var tolg= rough ? 1e-4 : 1e-4;
var tolx=1e-80, tolf=1e-10;
var xsize = subsys.params.length;
var csize = subsys.constraints.length;
@ -416,25 +418,23 @@ optim.dog_leg = function(subsys, rough) {
else {
//compute beta
var beta = 0;
var b = n.sub(h_gn, h_sd);
var bb = Math.abs(n.dot(b, b));
var gb = Math.abs(n.dot(h_sd,b));
var c = (delta + n.norm2(h_sd))*(delta - n.norm2(h_sd));
var d = n.sub(h_gn, h_sd);
if (gb > 0)
beta = c / (gb + Math.sqrt(gb * gb + c * bb));
else
beta = (Math.sqrt(gb * gb + c * bb) - gb)/bb;
var a = n.dot(d, d);
var b = 2 * n.dot(h_sd, d);
var c = n.dot(h_sd, h_sd) - delta*delta
sqrt_discriminant = Math.sqrt(b*b - 4*a*c)
var beta = (-b + sqrt_discriminant) / (2*a)
// and update h_dl and dL with beta
h_dl = n.add(h_sd, n.mul(beta,b));
h_dl = n.add(h_sd, n.mul(beta,d));
hitBoundary = true;
}
}
// see if we are already finished
if (stop)
break;