solve method

  1. @override
NonlinearResults solve()
override

Returns a NonlinearResults object which contains the data calculated by the root-finding algorithm.

Implementation

@override
NonlinearResults solve() {
  final guesses = <double>[];
  var n = 1;

  var x0 = (a * evaluateOn(b) - b * evaluateOn(a)) /
      (evaluateOn(b) - evaluateOn(a));
  var diff = evaluateOn(x0).abs();

  while ((diff >= tolerance) && (n <= maxSteps)) {
    final fa = evaluateOn(a);
    final fx = evaluateOn(x0);

    if (fa * fx < 0) {
      x0 = (x0 * fa - a * fx) / (fa - fx);
    } else {
      final fb = evaluateOn(b);
      x0 = (x0 * fb - b * fx) / (fb - fx);
    }

    guesses.add(x0);
    diff = fx.abs();
    ++n;
  }

  return NonlinearResults(
    guesses: guesses,
    convergence: convergence(guesses, maxSteps),
    efficiency: efficiency(guesses, maxSteps),
  );
}