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() {
  var diff = tolerance + 1;
  var n = 0;
  var currx0 = x0;
  final guesses = <double>[];

  while ((diff >= tolerance) && (n < maxSteps)) {
    final der = evaluateDerivativeOn(currx0);

    if ((der == 0) || (der.isNaN)) {
      throw NonlinearException("Couldn't evaluate f'($currx0)");
    }

    diff = -evaluateOn(currx0) / der;
    currx0 += diff;
    guesses.add(currx0);

    diff = diff.abs();
    ++n;
  }

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