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.
-
void
Polar
(AbstractDistMatrix<F> &A, 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)
-
bool