pyproximal.optimization.sr3.SR3#

pyproximal.optimization.sr3.SR3(Op, Reg, data, kappa, eps, x0=None, adaptive=True, iter_lim_outer=100, iter_lim_inner=100)[source]#

Sparse Relaxed Regularized Regression

Applies the Sparse Relaxed Regularized Regression (SR3) algorithm to an inverse problem with a sparsity constraint of the form

\[\min_x \dfrac{1}{2}\Vert \mathbf{Ax} - \mathbf{b}\Vert_2^2 + \lambda\Vert \mathbf{Lx}\Vert_1\]

SR3 introduces an auxiliary variable \(\mathbf{z} = \mathbf{Lx}\), and instead solves

\[\min_{\mathbf{x},\mathbf{z}} \dfrac{1}{2}\Vert \mathbf{Ax} - \mathbf{b}\Vert_2^2 + \lambda\Vert \mathbf{z}\Vert_1 + \dfrac{\kappa}{2}\Vert \mathbf{Lx} - \mathbf{z}\Vert_2^2\]
Parameters
Oppylops.LinearOperator

Forward operator

Regnumpy.ndarray

Regularization operator

datanumpy.ndarray

Data

kappafloat

Parameter controlling the difference between \(\mathbf{z}\) and \(\mathbf{Lx}\)

epsfloat

Regularization parameter

x0numpy.ndarray, optional

Initial guess

adaptivebool, optional

Use adaptive SR3 with a stopping criterion for the inner iterations or not

iter_lim_outerint, optional

Maximum number of iterations for the outer iteration

iter_lim_innerint, optional

Maximum number of iterations for the inner iteration

Returns
x: numpy.ndarray

Approximate solution.

Notes

SR3 uses the following algorithm:

\[\begin{split}\mathbf{x}_{k+1} = (\mathbf{A}^T\mathbf{A} + \kappa \mathbf{L}^T\mathbf{L})^{-1}(\mathbf{A}^T\mathbf{b} + \kappa \mathbf{L}^T\mathbf{y}_k) \\ \mathbf{y}_{k+1} = \prox_{\lambda/\kappa\mathcal{R}} (\mathbf{Lx}_{k+1})\end{split}\]