Skew-Hermitian eigensolvers¶
Essentially identical to the Hermitian eigensolver, HermitianEig()
;
for any skew-Hermitian matrix \(G\), \(iG\) is Hermitian, as
This fact implies a fast method for solving skew-Hermitian eigenvalue problems:
Form \(iG\) in \(O(n^2)\) work (switching to complex arithmetic in the real case)
Run a Hermitian eigensolve on \(iG\), yielding \(iG=Z \Lambda Z^H\).
Recognize that \(G=Z (-i \Lambda) Z^H\) provides an EVD of \(G\).
Please see the HermitianEig()
documentation for more details.
Computing eigenvalues¶
The following routines compute the imaginary components of the eigenvalues of the skew-Hermitian matrix G determined by the subset structure (the default is to compute all eigenvalues). By default, Elemental is used to transform the problem to and from real symmetric tridiagonal form and PMRRR is used to solve the tridiagonal EVP. Alternatively, the ctrl structure may be altered to request the usage of a (prototype) Spectral Divide and Conquer algorithm.
Note
Strict subset computation is not currently supported with Spectral Divide and Conquer.
C++ API¶
-
void
SkewHermitianEig
(UpperOrLower uplo, Matrix<F> &G, Matrix<Base<F>> &w, SortType sort = ASCENDING, const HermitianEigSubset<Base<F>> &subset = HermitianEigSubset<Base<F>>(), const HermitianEigCtrl<Base<F>> &ctrl = HermitianEigCtrl<Base<F>>())¶
-
void
SkewHermitianEig
(UpperOrLower uplo, AbstractDistMatrix<F> &G, AbstractDistMatrix<Base<F>> &w, SortType sort = ASCENDING, const HermitianEigSubset<Base<F>> &subset = HermitianEigSubset<Base<F>>(), const HermitianEigCtrl<Base<F>> &ctrl = HermitianEigCtrl<Base<F>>())¶
C API¶
-
ElError
ElSkewHermitianEig_s
(ElUpperOrLower uplo, ElMatrix_s G, ElMatrix_s w, ElSortType sort)¶
-
ElError
ElSkewHermitianEig_d
(ElUpperOrLower uplo, ElMatrix_d G, ElMatrix_d w, ElSortType sort)¶
-
ElError
ElSkewHermitianEig_c
(ElUpperOrLower uplo, ElMatrix_c G, ElMatrix_s w, ElSortType sort)¶
-
ElError
ElSkewHermitianEig_z
(ElUpperOrLower uplo, ElMatrix_z G, ElMatrix_d w, ElSortType sort)¶
-
ElError
ElSkewHermitianEigDist_s
(ElUpperOrLower uplo, ElDistMatrix_s G, ElDistMatrix_s w, ElSortType sort)¶
-
ElError
ElSkewHermitianEigDist_d
(ElUpperOrLower uplo, ElDistMatrix_d G, ElDistMatrix_d w, ElSortType sort)¶
-
ElError
ElSkewHermitianEigDist_c
(ElUpperOrLower uplo, ElDistMatrix_c G, ElDistMatrix_s w, ElSortType sort)¶
-
ElError
ElSkewHermitianEigDist_z
(ElUpperOrLower uplo, ElDistMatrix_z G, ElDistMatrix_d w, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPartial_s
(ElUpperOrLower uplo, ElMatrix_s G, ElMatrix_s w, ElSortType sort, ElHermitianEigSubset_s subset)¶
-
ElError
ElSkewHermitianEigPartial_d
(ElUpperOrLower uplo, ElMatrix_d G, ElMatrix_d w, ElSortType sort, ElHermitianEigSubset_d subset)¶
-
ElError
ElSkewHermitianEigPartial_c
(ElUpperOrLower uplo, ElMatrix_c G, ElMatrix_s w, ElSortType sort, ElHermitianEigSubset_s subset)¶
-
ElError
ElSkewHermitianEigPartial_z
(ElUpperOrLower uplo, ElMatrix_z G, ElMatrix_d w, ElSortType sort, ElHermitianEigSubset_d subset)¶
-
ElError
ElSkewHermitianEigPartialDist_s
(ElUpperOrLower uplo, ElDistMatrix_s G, ElDistMatrix_s w, ElSortType sort, ElHermitianEigSubset_s subset)¶
-
ElError
ElSkewHermitianEigPartialDist_d
(ElUpperOrLower uplo, ElDistMatrix_d G, ElDistMatrix_d w, ElSortType sort, ElHermitianEigSubset_d subset)¶
-
ElError
ElSkewHermitianEigPartialDist_c
(ElUpperOrLower uplo, ElDistMatrix_c G, ElDistMatrix_s w, ElSortType sort, ElHermitianEigSubset_s subset)¶
-
ElError
ElSkewHermitianEigPartialDist_z
(ElUpperOrLower uplo, ElDistMatrix_z G, ElDistMatrix_d w, ElSortType sort, ElHermitianEigSubset_d subset)¶
Computing eigenpairs¶
The following routines compute the set of eigenpairs (note that only the imaginary components of the eigenvalues are returned) of the skew-Hermitian matrix G determined by the subset structure (the default is to compute all eigenpairs). By default, Elemental is used to transform the problem to and from real symmetric tridiagonal form and PMRRR is used to solve the tridiagonal EVP. Alternatively, the ctrl structure may be altered to request the usage of a (prototype) Spectral Divide and Conquer algorithm.
Note
Strict subset computation is not currently supported with Spectral Divide and Conquer.
C++ API¶
-
void
SkewHermitianEig
(UpperOrLower uplo, Matrix<F> &G, Matrix<Base<F>> &w, Matrix<Complex<Base<F>>> &Z, SortType sort = ASCENDING, const HermitianEigSubset<Base<F>> &subset = HermitianEigSubset<Base<F>>(), const HermitianEigCtrl<Base<F>> &ctrl = HermitianEigCtrl<Base<F>>())¶
-
void
SkewHermitianEig
(UpperOrLower uplo, AbstractDistMatrix<F> &G, AbstractDistMatrix<Base<F>> &w, AbstractDistMatrix<Complex<Base<F>>> &Z, SortType sort = ASCENDING, const HermitianEigSubset<Base<F>> &subset = HermitianEigSubset<Base<F>>(), const HermitianEigCtrl<Base<F>> &ctrl = HermitianEigCtrl<Base<F>>())¶
C API¶
-
ElError
ElSkewHermitianEigPair_s
(ElUpperOrLower uplo, ElMatrix_s G, ElMatrix_s w, ElMatrix_c Z, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPair_d
(ElUpperOrLower uplo, ElMatrix_d G, ElMatrix_d w, ElMatrix_z Z, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPair_c
(ElUpperOrLower uplo, ElMatrix_c G, ElMatrix_s w, ElMatrix_c Z, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPair_z
(ElUpperOrLower uplo, ElMatrix_z G, ElMatrix_d w, ElMatrix_z Z, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPairDist_s
(ElUpperOrLower uplo, ElDistMatrix_s G, ElDistMatrix_s w, ElDistMatrix_c Z, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPairDist_d
(ElUpperOrLower uplo, ElDistMatrix_d G, ElDistMatrix_d w, ElDistMatrix_z Z, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPairDist_c
(ElUpperOrLower uplo, ElDistMatrix_c G, ElDistMatrix_s w, ElDistMatrix_c Z, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPairDist_z
(ElUpperOrLower uplo, ElDistMatrix_z G, ElDistMatrix_d w, ElDistMatrix_z Z, ElSortType sort)¶
-
ElError
ElSkewHermitianEigPairPartial_s
(ElUpperOrLower uplo, ElMatrix_s G, ElMatrix_s w, ElMatrix_c Z, ElSortType sort, ElHermitianEigSubset_s subset)¶
-
ElError
ElSkewHermitianEigPairPartial_d
(ElUpperOrLower uplo, ElMatrix_d G, ElMatrix_d w, ElMatrix_z Z, ElSortType sort, ElHermitianEigSubset_d subset)¶
-
ElError
ElSkewHermitianEigPairPartial_c
(ElUpperOrLower uplo, ElMatrix_c G, ElMatrix_s w, ElMatrix_c Z, ElSortType sort, ElHermitianEigSubset_s subset)¶
-
ElError
ElSkewHermitianEigPairPartial_z
(ElUpperOrLower uplo, ElMatrix_z G, ElMatrix_d w, ElMatrix_z Z, ElSortType sort, ElHermitianEigSubset_d subset)¶
-
ElError
ElSkewHermitianEigPairPartialDist_s
(ElUpperOrLower uplo, ElDistMatrix_s G, ElDistMatrix_s w, ElDistMatrix_c Z, ElSortType sort, ElHermitianEigSubset_s subset)¶
-
ElError
ElSkewHermitianEigPairPartialDist_d
(ElUpperOrLower uplo, ElDistMatrix_d G, ElDistMatrix_d w, ElDistMatrix_z Z, ElSortType sort, ElHermitianEigSubset_d subset)¶
-
ElError
ElSkewHermitianEigPairPartialDist_c
(ElUpperOrLower uplo, ElDistMatrix_c G, ElDistMatrix_s w, ElDistMatrix_c Z, ElSortType sort, ElHermitianEigSubset_s subset)¶
-
ElError
ElSkewHermitianEigPairPartialDist_z
(ElUpperOrLower uplo, ElDistMatrix_z G, ElDistMatrix_d w, ElDistMatrix_z Z, ElSortType sort, ElHermitianEigSubset_d subset)¶