 
 
 
 
 
   
  starting_points := {};
  x[0] := most_isolated_valid_point( starting_points );
  for i do
      x[i] := F(x[i-1]);
      starting_points := starting_points union {x[i-1]};
      if computation_failed or outside_domain(x[i]) then
           start_again
      else if convergence_achieved then
           successful_finish
      else if i>3 and diverging then
           start_again
      else if acceleration_possible then
           x[i] := acceleration(x[i], x[i-1], ...)
      end if
  end do;