mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-28 11:22:59 +01:00
split system by two steps
This commit is contained in:
parent
9763c763ea
commit
9a0e2db885
2 changed files with 77 additions and 59 deletions
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue