pyproximal.optimization.sr3.SR3#
- pyproximal.optimization.sr3.SR3(Op: LinearOperator, Reg: LinearOperator, data: ndarray[tuple[Any, ...], dtype[_ScalarT]], kappa: float, eps: float, x0: Optional[ndarray[tuple[Any, ...], dtype[_ScalarT]]] = None, adaptive: bool = True, iter_lim_outer: int = 100, iter_lim_inner: int = 100) ndarray[tuple[Any, ...], dtype[_ScalarT]][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
- Op
pylops.LinearOperator Forward operator
- Reg
numpy.ndarray Regularization operator
- data
numpy.ndarray Data
- kappa
float Parameter controlling the difference between \(\mathbf{z}\) and \(\mathbf{Lx}\)
- eps
float Regularization parameter
- x0
numpy.ndarray, optional Initial guess
- adaptive
bool, optional Use adaptive SR3 with a stopping criterion for the inner iterations or not
- iter_lim_outer
int, optional Maximum number of iterations for the outer iteration
- iter_lim_inner
int, optional Maximum number of iterations for the inner iteration
- Op
- Returns
- x:
numpy.ndarray Approximate solution.
- x:
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}\]