next up previous print clean
Next: Program functions Up: Inversion objects Previous: Operator

Solvers

The base solver class, SEP.solv_base.solver, is inherited from SEP.opt_base.options. The solver keeps track of its progress using the SEP.stat_sep.status module. It expects that the parameters niter, the number of iterations, and stepper, the class that calculates the step to be set by the time prep_run is called. The function iter iterates niter times. To make expanding the solver easier, it includes a dummy function end_iter(iter) that is run at the end of each iteration. This function can be overwritten to do things like write out the model at each iteration.

There are three classes derived from the SEP.solv_base.solver class. The SEP.solv_smp.solver class is designed for solving problems of the form
\begin{displaymath}
Q(\bf m) = \vert\vert \bf d - \bf L \bf m\vert\vert^2\end{displaymath} (1)
where $\bf d$ is the data, $\bf L$ is the operator, and $\bf m$ is the model. It expects that its children set the operator op, the data data, the model model before its prep_run function is invoked. It will also look for a weighting operator wop, a a model vector v, an initial model m0, and an initial residual vector resd. From this information, an initial residual model vector are calculated and SEP.solv_base.solver's prep_run is invoked.

The SEP.solv_reg.solver class is also derived from SEP.solv_base.solver class. It is used for regularized inversion problems of the form,
\begin{displaymath}
Q(\bf m) = \vert\vert \bf d - \bf L \bf m\vert\vert^2 + \epsilon^2 \vert\vert \bf A \bf m \vert\vert^2,\end{displaymath} (2)
where $\bf A$ is the regularization operator. It expects all of the arguments of SEP.solv_smp.solver with the addition of regularization operator reg and the relative weighting parameter $\epsilon$ eps. In addition accepts the optional residual model space vector resm.

The final solver derived from SEP.solv_base.solver is SEP.solve_prec.solver. It is used from regularized problems with model preconditioning of the form,
\begin{displaymath}
Q(\bf p) = \vert\vert \bf d - \bf L \bf B \bf m\vert\vert^2 + \epsilon^2 \vert\vert \bf p \vert\vert^2,\end{displaymath} (3)
where $\bf B$ is the preconditioning operator and $\bf p$ is the preconditioned variable, where $\bf m = \bf B \bf p$.It expects all of the same parameters of SEP.solv_reg.solver, with reg removed and prec, the preconditioning operator, added.

All of the solvers are currently linear solvers. Adding non-linear solvers would be fairly easy. They all require a step function. Currently only a conjugate gradient step function is available in SEP.cgstep.cgstep.


next up previous print clean
Next: Program functions Up: Inversion objects Previous: Operator
Stanford Exploration Project
5/3/2005