gauss_newton

odl.solvers.iterative.iterative.gauss_newton(op, x, rhs, niter, zero_seq=<generator object exp_zero_seq>, callback=None)[source]

Optimized implementation of a Gauss-Newton method.

This method solves the inverse problem (of the first kind):

A(x) = y

for a (Frechet-) differentiable Operator A using a Gauss-Newton iteration.

It uses a minimum amount of memory copies by applying re-usable temporaries and in-place evaluation.

A variant of the method applied to a specific problem is described in a Wikipedia article.

Parameters:
opOperator

Operator in the inverse problem. If not linear, it must have an implementation of Operator.derivative, which in turn must implement Operator.adjoint, i.e. the call op.derivative(x).adjoint must be valid.

xop.domain element

Element to which the result is written. Its initial value is used as starting point of the iteration, and its values are updated in each iteration step.

rhsop.range element

Right-hand side of the equation defining the inverse problem

niterint

Maximum number of iterations.

zero_seqiterable, optional

Zero sequence whose values are used for the regularization of the linearized problem in each Newton step.

callbackcallable, optional

Object executing code per iteration, e.g. plotting each iterate.