Hermitian SVD¶
Suppose that \(A\) is Hermitian, with a spectral decomposition
\[A = V \Lambda V^H.\]
Then an SVD of \(A\) can easily be computed as
\[A = U |\Lambda| V^H,\]
where the columns of \(U\) equal the columns of \(V\), modulo sign flips introduced by negative eigenvalues.
Computing singular values¶
The following routines return the singular values of \(A\) in s. Note that the appropriate triangle of A is overwritten during computation.
C++ API¶
-
void
HermitianSVD
(UpperOrLower uplo, Matrix<F> &A, Matrix<Base<F>> &s)¶
-
void
HermitianSVD
(UpperOrLower uplo, AbstractDistMatrix<F> &A, AbstractDistMatrix<Base<F>> &s)¶
C API¶
-
ElError
ElHermitianSingularValues_s
(ElUpperOrLower uplo, ElMatrix_s A, ElMatrix_s s)¶
-
ElError
ElHermitianSingularValues_d
(ElUpperOrLower uplo, ElMatrix_d A, ElMatrix_d s)¶
-
ElError
ElHermitianSingularValues_c
(ElUpperOrLower uplo, ElMatrix_c A, ElMatrix_s s)¶
-
ElError
ElHermitianSingularValues_z
(ElUpperOrLower uplo, ElMatrix_z A, ElMatrix_d s)¶
-
ElError
ElHermitianSingularValuesDist_s
(ElUpperOrLower uplo, ElDistMatrix_s A, ElDistMatrix_s s)¶
-
ElError
ElHermitianSingularValuesDist_d
(ElUpperOrLower uplo, ElDistMatrix_d A, ElDistMatrix_d s)¶
-
ElError
ElHermitianSingularValuesDist_c
(ElUpperOrLower uplo, ElDistMatrix_c A, ElDistMatrix_s s)¶
-
ElError
ElHermitianSingularValuesDist_z
(ElUpperOrLower uplo, ElDistMatrix_z A, ElDistMatrix_d s)¶
Computing Singular Value Decompositions¶
The following routines return a vector of singular values, \(s\), and the left and right singular vector matrices, \(U\) and \(V\), such that \(A=U \mathrm{diag}(s) V^H\).
C++ API¶
-
void
HermitianSVD
(UpperOrLower uplo, AbstractDistMatrix<F> &A, AbstractDistMatrix<Base<F>> &s, AbstractDistMatrix<F> &U, AbstractDistMatrix<F> &V)¶
C API¶
-
ElError
ElHermitianSVD_s
(ElUpperOrLower uplo, ElMatrix_s A, ElMatrix_s s, ElMatrix_s U, ElMatrix_s V)¶
-
ElError
ElHermitianSVD_d
(ElUpperOrLower uplo, ElMatrix_d A, ElMatrix_d s, ElMatrix_d U, ElMatrix_d V)¶
-
ElError
ElHermitianSVD_c
(ElUpperOrLower uplo, ElMatrix_c A, ElMatrix_s s, ElMatrix_c U, ElMatrix_c V)¶
-
ElError
ElHermitianSVD_z
(ElUpperOrLower uplo, ElMatrix_z A, ElMatrix_d s, ElMatrix_z U, ElMatrix_z V)¶
-
ElError
ElHermitianSVDDist_s
(ElUpperOrLower uplo, ElDistMatrix_s A, ElDistMatrix_s s, ElDistMatrix_s U, ElDistMatrix_s V)¶
-
ElError
ElHermitianSVDDist_d
(ElUpperOrLower uplo, ElDistMatrix_d A, ElDistMatrix_d s, ElDistMatrix_d U, ElDistMatrix_d V)¶
-
ElError
ElHermitianSVDDist_c
(ElUpperOrLower uplo, ElDistMatrix_c A, ElDistMatrix_s s, ElDistMatrix_c U, ElDistMatrix_c V)¶
-
ElError
ElHermitianSVDDist_z
(ElUpperOrLower uplo, ElDistMatrix_z A, ElDistMatrix_d s, ElDistMatrix_z U, ElDistMatrix_z V)¶