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 xold = firstGuess;
  var x0 = secondGuess;

  var fold = evaluateOn(xold);
  var fnew = evaluateOn(x0);
  var diff = tolerance + 1;

  while ((diff >= tolerance) && (n <= maxSteps)) {
    final den = fnew - fold;

    if ((den == 0) || (den.isNaN)) {
      throw NonlinearException('Invalid denominator encountered. '
          'The invalid value for the denominator was $den');
    }

    diff = -(fnew * (x0 - xold)) / den;
    xold = x0;
    fold = fnew;
    x0 += diff;

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

    guesses.add(x0);
    fnew = evaluateOn(x0);
  }

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