split system by two steps

This commit is contained in:
Val Erastov 2014-10-29 18:09:58 -07:00
parent 9763c763ea
commit 9a0e2db885
2 changed files with 77 additions and 59 deletions

View file

@ -203,7 +203,7 @@ TCAD.parametric.lock2 = function(constrs, locked) {
}
};
TCAD.parametric.solve = function(constrs, locked, fineLevel, alg) {
TCAD.parametric.prepare = function(constrs, locked, alg) {
if (constrs.length == 0) return;
@ -233,47 +233,57 @@ TCAD.parametric.solve = function(constrs, locked, fineLevel, alg) {
sys.setParams(point);
return sys.makeJacobian();
};
alg = 5;
if (alg > 0) {
switch (alg) {
alg = 5;
function solve(fineLevel) {
if (alg > 0) {
switch (alg) {
case 1:
var res = TCAD.math.solve_BFGS(sys, 1e-4, 1e-4);
console.log(res);
break;
case 2:
TCAD.math.solve_TR(sys);
break;
case 3:
TCAD.math.noptim(sys);
break;
case 4:
TCAD.math.solve_UNCMIN(sys);
break;
case 5:
optim.dog_leg(sys);
break;
}
return sys;
}
var opt = new LMOptimizer(sys.getParams(), arr(sys.constraints.length), model, jacobian);
var eps;
switch (fineLevel) {
case 1:
var res = TCAD.math.solve_BFGS(sys, 1e-4, 1e-4);
console.log(res);
eps = 0.01;
opt.init0(eps, eps, eps);
break;
case 2:
TCAD.math.solve_TR(sys);
break;
case 3:
TCAD.math.noptim(sys);
break;
case 4:
TCAD.math.solve_UNCMIN(sys);
break;
case 5:
optim.dog_leg(sys);
eps = 0.1;
opt.init0(eps, eps, eps);
break;
default:
eps = 0.00000001;
opt.init0(eps, eps, eps);
}
return sys;
var res = opt.doOptimize();
sys.setParams(res[0]);
// console.log("Solved with error: " + sys.error());
return res;
}
var opt = new LMOptimizer(sys.getParams(), arr(sys.constraints.length), model, jacobian);
var eps;
switch (fineLevel) {
case 1:
eps = 0.01;
opt.init0(eps, eps, eps);
break;
case 2:
eps = 0.1;
opt.init0(eps, eps, eps);
break;
default:
eps = 0.00000001;
opt.init0(eps, eps, eps);
}
var res = opt.doOptimize();
sys.setParams(res[0]);
// console.log("Solved with error: " + sys.error());
return sys;
var systemSolver = {
system : sys,
solveSystem : solve
};
return systemSolver;
};

View file

@ -226,8 +226,12 @@ TCAD.TWO.ParametricManager.prototype.solve1 = function(locked, onSolved) {
xhr.send(JSON.stringify(request));
};
TCAD.TWO.ParametricManager.prototype.solve = function(locked, fineLevel, alg) {
this.prepare(locked, alg).solve(fineLevel);
};
TCAD.TWO.ParametricManager.prototype.prepare = function(locked, alg) {
var pdict = {};
var params;
var _constrs = [];
@ -273,28 +277,32 @@ TCAD.TWO.ParametricManager.prototype.solve = function(locked, fineLevel, alg) {
}
}
TCAD.parametric.solve(_constrs, _locked, fineLevel, alg);
for (p in pdict) {
_p = pdict[p];
_p._backingParam.set(_p.get());
}
//Make sure all equal constraints are equal
for (i = 0; i < equals.length; ++i) {
var ec = equals[i];
var master = ec.p1;
var slave = ec.p2;
if (lockedIds[master.id] === true) {
master = ec.p2;
slave = ec.p1;
if (lockedIds[master.id] === true) {
continue;
}
var solver = TCAD.parametric.prepare(_constrs, _locked, alg);
function solve(fineLevel) {
solver.solveSystem(fineLevel);
for (p in pdict) {
_p = pdict[p];
_p._backingParam.set(_p.get());
}
//Make sure all equal constraints are equal
for (i = 0; i < equals.length; ++i) {
var ec = equals[i];
var master = ec.p1;
var slave = ec.p2;
if (lockedIds[master.id] === true) {
master = ec.p2;
slave = ec.p1;
if (lockedIds[master.id] === true) {
continue;
}
}
slave.set( master.get() );
}
slave.set( master.get() );
}
solver.solve = solve;
return solver;
};
TCAD.TWO.Constraints.Equal = function(p1, p2) {