mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-11 02:45:52 +01:00
dogleg
This commit is contained in:
parent
a07b4ac99d
commit
7ec94c0bb1
1 changed files with 13 additions and 13 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue