double
findRootBF(MathFunction g, Interval i)
Source
double findRootBF(MathFunction g, Interval i) {
//print('Analyze $i');
if (i.length() < 0.001) {
return i.min;
}
Expression tExpr = new IntervalLiteral(new Number(i.min), new Number(i.max));
Variable t = new Variable('t');
cm.bindVariable(t, tExpr);
Interval gEval = g.evaluate(EvaluationType.INTERVAL, cm);
if (gEval.containsZero()) {
num r1 = findRootBF(g, new Interval(i.min, (i.min + i.max) / 2.0));
num r2 = findRootBF(g, new Interval((i.min + i.max) / 2.0, i.max));
return Math.min(r1, r2); // Return root ar minimal distance.
} else {
return MAX_DIST;
}
}