pyproximal.Orthogonal#

class pyproximal.Orthogonal(f, Q, partial=False, b=None, alpha=1.0)[source]#

Proximal operator of any function of the product between an orthogonal matrix and a vector (plus summation of a vector).

Proximal operator of any quadratic function \(g(\mathbf{x})=f(\mathbf{Qx} + \mathbf{b})\) where \(\mathbf{Q}\) is an orthogonal operator and \(\mathbf{b}\) is a vector in the data space of \(\mathbf{Q}\).

Parameters
fpyproximal.ProxOperator

Proximal operator

Qpylops.LinearOperator

Orthogonal operator

partialbool, optional

Partial (True) of full (False) orthogonality

bnp.ndarray, optional

Vector

alphafloat, optional

Positive coefficient for partial orthogonality. It will be ignored if partial=False

Notes

The Proximal operator of any function of the form \(g(\mathbf{x}) = f(\mathbf{Qx} + \mathbf{b})\) with the operator \(\mathbf{Q}\) satisfying the following condition \(\mathbf{Q}\mathbf{Q}^T = \alpha \mathbf{I}\) (partial orthogonality) is [1]:

\[\prox_{\tau g}(x) = \frac{1}{\alpha} ((\alpha \mathbf{I} - \mathbf{Q}^H \mathbf{Q}) \mathbf{x} + \mathbf{Q}^H (\prox_{\alpha \tau f}(\mathbf{Qx} + \mathbf{b}) - \mathbf{b}))\]

A special case arises when \(\mathbf{Q}\mathbf{Q}^T = \mathbf{Q}^T\mathbf{Q} = \mathbf{I}\) (full orthogonality), and the proximal operator reduces to:

\[\prox_{\tau g}(x) = \mathbf{Q}^H (\prox_{\tau f}(\mathbf{Qx} + \mathbf{b}) - \mathbf{b}))\]
1

Daniel O’Connor, D., and Vandenberghe, L., “Primal-Dual Decomposition by Operator Splitting and Applications to Image Deblurring”, SIAM J. Imaging Sciences, vol. 7, pp. 1724–1754. 2014.

Methods

__init__(f, Q[, partial, b, alpha])

affine_addition(v)

Affine addition

chain(g)

Chain

grad(x)

Compute gradient

postcomposition(sigma)

Postcomposition

precomposition(a, b)

Precomposition

prox(**kwargs)

proxdual(**kwargs)