Convex optimization

LogBarrier

Uses a careful calculation of the log of the determinant in order to return the log barrier of a Hermitian positive-definite matrix A, \(-\log(\mbox{det}(A))\).

Base<F> LogBarrier(UpperOrLower uplo, const Matrix<F> &A)
Base<F> LogBarrier(UpperOrLower uplo, const DistMatrix<F> &A)
Base<F> LogBarrier(UpperOrLower uplo, Matrix<F> &A, bool canOverwrite = false)
Base<F> LogBarrier(UpperOrLower uplo, DistMatrix<F> &A, bool canOverwrite = false)

LogDetDivergence

The log-det divergence of a pair of \(n \times n\) Hermitian positive-definite matrices \(A\) and \(B\) is

\[D_{ld}(A,B) = \mbox{tr}(A B^{-1}) -\log(\mbox{det}(A B^{-1})) - n,\]

which can be greatly simplified using the Cholesky factors of \(A\) and \(B\). In particular, if we set \(Z = L_B^{-1} L_A\), where \(A=L_A L_A^H\) and \(B=L_B L_B^H\) are Cholesky factorizations, then

\[D_{ld}(A,B) = \| Z \|_F^2 - 2 \log(\mbox{det}(Z)) - n.\]
Base<F> LogDetDivergence(UpperOrLower uplo, const Matrix<F> &A, const Matrix<F> &B)
Base<F> LogDetDivergence(UpperOrLower uplo, const DistMatrix<F> &A, const DistMatrix<F> &B)

Singular-value soft-thresholding

Overwrites \(A\) with \(U S_{\tau}(\Sigma) V^H\), where \(U \Sigma V^H\) is the singular-value decomposition of \(A\) upon input and \(S_{\tau}\) performs soft-thresholding with parameter \(\tau\). The return value is the rank of the soft-thresholded matrix.

int SVT(Matrix<F> &A, Base<F> tau, bool relative = false)
int SVT(DistMatrix<F> &A, Base<F> tau, bool relative = false)

Runs the default SVT algorithm. In the sequential case, this is currently svt::Normal, and, in the parallel case, it is svt::Cross.

int SVT(Matrix<F> &A, Base<F> tau, int relaxedRank, bool relative = false)
int SVT(DistMatrix<F> &A, Base<F> tau, int relaxedRank, bool relative = false)

Runs a faster (for small ranks), but less accurate, algorithm given an upper bound on the rank of the soft-thresholded matrix. The current implementation preprocesses via relaxedRank steps of (Businger-Golub) column-pivoted QR via the routine svt::PivotedQR.

int SVT(DistMatrix<F, U, STAR> &A, Base<F> tau, bool relative = false)

Runs an SVT algorithm designed for tall-skinny matrices. The current implementation is based on TSQR factorization and is svt::TSQR.

namespace svt

int svt::Normal(Matrix<F> &A, Base<F> tau, bool relative = false)
int svt::Normal(DistMatrix<F> &A, Base<F> tau, bool relative = false)

Runs a standard SVD, soft-thresholds the singular values, and then reforms the matrix.

int svt::Cross(Matrix<F> &A, Base<F> tau, bool relative = false)
int svt::Cross(DistMatrix<F> &A, Base<F> tau, bool relative = false)

Forms the normal matrix, computes its Hermitian EVD, soft-thresholds the eigenvalues, and then reforms the matrix. Note that Elemental’s parallel Hermitian EVD is much faster than its parallel SVD; this is typically worth the loss of accuracy in the computed small (truncated) singular values and is therefore the default choice for parallel SVT.

int svt::PivotedQR(Matrix<F> &A, Base<F> tau, int numStepsQR, bool relative = false)
int svt::PivotedQR(DistMatrix<F> &A, Base<F> tau, int numStepsQR, bool relative = false)

Computes an approximate SVT by first approximating A as the rank-numSteps approximation produced by numSteps iterations of column-pivoted QR.

int svt::TSQR(DistMatrix<F, U, STAR> &A, Base<F> tau, bool relative = false)

Since the majority of the work in a tall-skinny SVT will be in the initial QR factorization, this algorithm runs a TSQR factorization and then computes the SVT of the small R factor using a single process.

Soft-thresholding

Overwrites each entry of \(A\) with its soft-thresholded value.

void SoftThreshold(Matrix<F> &A, Base<F> tau, bool relative = false)
void SoftThreshold(DistMatrix<F> &A, Base<F> tau, bool relative = false)