The following functions drive the iteration of each algorithm. Each
function performs one iteration to update the state of any solver of the
corresponding type. The same functions work for all solvers so that
different methods can be substituted at runtime without modifications to
the code.

These functions perform a single iteration of the solver s. If
the iteration encounters an unexpected problem then an error code will
be returned. The solver maintains a current estimate of the best-fit
parameters at all times. This information can be accessed with the
following auxiliary functions,