Polar decomposition

Every matrix \(A\) can be written as \(A=QP\), where \(Q\) is unitary and \(P\) is Hermitian and positive semi-definite. This is known as the polar decomposition of \(A\) and can be constructed as \(Q := U V^H\) and \(P := V \Sigma V^H\), where \(A = U \Sigma V^H\) is the SVD of \(A\). Alternatively, it can be computed through (a dynamically-weighted) Halley iteration.

Implementation

SVD approach

QWDH approach

void Polar(Matrix<F> &A, const PolarCtrl &ctrl = PolarCtrl())
void Polar(AbstractDistMatrix<F> &A, const PolarCtrl &ctrl = PolarCtrl())
void Polar(Matrix<F> &A, Matrix<F> &P, const PolarCtrl &ctrl = PolarCtrl())
void Polar(AbstractDistMatrix<F> &A, AbstractDistMatrix<F> &P, const PolarCtrl &ctrl = PolarCtrl())

Compute the polar decomposition of \(A\), \(A=QP\), returning \(Q\) within A and \(P\) within P. The current implementation first computes the SVD.

void HermitianPolar(UpperOrLower uplo, Matrix<F> &A, const PolarCtrl &ctrl = PolarCtrl())
void HermitianPolar(UpperOrLower uplo, AbstractDistMatrix<F> &A, const PolarCtrl &ctrl = PolarCtrl())
void HermitianPolar(UpperOrLower uplo, Matrix<F> &A, Matrix<F> &P, const PolarCtrl &ctrl = PolarCtrl())
void HermitianPolar(UpperOrLower uplo, AbstractDistMatrix<F> &A, AbstractDistMatrix<F> &P, const PolarCtrl &ctrl = PolarCtrl())

Compute the polar decomposition through a Hermitian EVD. Since this is equivalent to a Hermitian sign decomposition (if \(\text{sgn}(0)\) is set to 1), these routines are equivalent to HermitianSign.

Algorithmic options

By default, an SVD-based algorithm is used, but an approach based upon a QR-based Dynamically Weighted Halley (QDWH) iteration can be manually chosen.

type PolarCtrl
bool qdwh

Whether or not to use QDWH (the default is no)

bool colPiv

Whether or not QDWH should use column pivoting in its QR factorizations (the default is no)

Int maxIts

The maximum number of iterations of QDWH (the default is 20, but typically no more than 6 or 7 will be performed)

mutable Int numIts

The number of iterations of QDWH performed in the last call