Module: Linear Algebra Group: Symmetric Eigenvalue Decomposition classes
Does not inherit
RWSymEigServer<DComplex>::decompose () RWSymEigServer<double>::decompose () |
RWSymEigServer<float>::decompose () RWSymEigServer<T>::computeEigenVectors() |
RWSymEigServer<T>::operator() () |
#include <rw/lapack/seigsrv.h> #include <rw/lapack/heigsrv.h> RWSymEigServer<double> server; RWSymEigDecomp<double> eig = server(A); // A is a
// RWSymMat<double>
The classes RWSymEigServer<T> and RWHermEigServer<T> are abstract base classes for the symmetric and Hermitian eigenvalue servers, respectively. For each precision, the Linear Algebra Module provides several derived types:
The classes RWSymQREigServer<T> and RWHermQREigServer<T> use the implicitly shifted QR method, switching between QR and QL variants in order to handle graded matrices effectively. These are the default servers.
The classes RWSymPDQREigServer<T> and RWHermPDQREigServer<T> use a combination of Cholesky factorization and bidiagonal QR iteration. They apply to positive definite matrices only. The resulting eigenvalue decompositions may be significantly more accurate than those of the other servers.
The classes RWSymRFQREigServer<T> and RWHermRFQREigServer<T> use a version of the QR algorithm without square roots. They can only compute all the eigenvalues, and no eigenvectors.
The classes RWSymSomeEigServer<T> and RWHermSomeEigServer<T> use the bisection method to compute some of the eigenvalues and (optionally) eigenvectors. You can use these servers to compute the first k largest eigenvalues, the first k smallest eigenvalues, or the ith through jth largest eigenvalues.
The classesRWSymRangeEigServer<T> and RWHermRangeEigServer<T> use bisection to compute all the eigenvalues and (optionally) eigenvectors in a real range.
These base classes serve two purposes:
to provide a specification of the commonality between servers, and
to house implementation code common to several different servers.
The common implementation includes a set of protected routines to modify a given RWSymEigDecomp<T> or RWHermEigDecomp<T> object. This way, all server classes, including any that you write, can access the internals of the decomposition object without being explicitly listed as friend classes.
See the specific server subclasses for examples.
virtual bool RWSymEigServer<T>::computeEigenVectors() const;
Returns true if this server is configured to compute eigenvectors as well as eigenvalues.
virtual FloatSymEigDecomp RWSymEigServer<float>::decompose
(const RWSymTriDiagDecomp<float>& A) const =0; virtual DoubleSymEigDecomp RWSymEigServer<double>::decompose
(const RWSymTriDiagDecomp<double>& A) const =0; virtual DoubleSymEigDecomp RWSymEigServer<DComplex>::decompose
(const RWSymTriDiagDecomp<double>& A) const =0;
Computes the eigenvalue decomposition of the tridiagonal matrix inside the tridiagonal decomposition. This pure virtual function is implemented in the specific server classes. It is used to implement the default
operator()() functions.
virtual RWSymEigDecomp<T> RWSymEigServer<T>::operator()
(const RWSymMat<T>& A) const; virtual RWSymEigDecomp<T> RWSymEigServer<T>::operator()
(const RWSymBandMat<T>& A) const;
Computes a symmetric eigenvalue decomposition. The default method implemented in this class first constructs a tridiagonal decomposition from the given matrix, next computes the eigenvalue decomposition for that decomposition, and finally transforms the eigenvectors as required.
© Copyright Rogue Wave Software, Inc. All Rights Reserved.
Rogue Wave and SourcePro are registered trademarks of Rogue Wave Software, Inc. in the United States and other countries. All other trademarks are the property of their respective owners.
Contact Rogue Wave about documentation or support issues.