add an example for GeneralizedEigenSolver

This commit is contained in:
Gael Guennebaud 2012-07-28 18:00:54 +02:00
parent 8ab0e16e27
commit 6f54269829
2 changed files with 15 additions and 18 deletions

View File

@ -18,7 +18,7 @@ namespace Eigen {
/** \eigenvalues_module \ingroup Eigenvalues_Module /** \eigenvalues_module \ingroup Eigenvalues_Module
* *
* *
* \class EigenSolver * \class GeneralizedEigenSolver
* *
* \brief Computes the generalized eigenvalues and eigenvectors of a pair of general matrices * \brief Computes the generalized eigenvalues and eigenvectors of a pair of general matrices
* *
@ -48,8 +48,9 @@ namespace Eigen {
* eigenvectors are computed, they can be retrieved with the eigenvalues() and * eigenvectors are computed, they can be retrieved with the eigenvalues() and
* eigenvectors() functions. * eigenvectors() functions.
* *
* The documentation for GeneralizedEigenSolver(const MatrixType&, const MatrixType&, bool) contains an * Here is an usage example of this class:
* example of the typical use of this class. * Example: \include GeneralizedEigenSolver.cpp
* Output: \verbinclude GeneralizedEigenSolver.out
* *
* \sa MatrixBase::eigenvalues(), class ComplexEigenSolver, class SelfAdjointEigenSolver * \sa MatrixBase::eigenvalues(), class ComplexEigenSolver, class SelfAdjointEigenSolver
*/ */
@ -142,9 +143,6 @@ template<typename _MatrixType> class GeneralizedEigenSolver
* This constructor calls compute() to compute the generalized eigenvalues * This constructor calls compute() to compute the generalized eigenvalues
* and eigenvectors. * and eigenvectors.
* *
* Example: \include GeneralizedEigenSolver_GeneralizedEigenSolver_MatrixType.cpp
* Output: \verbinclude GeneralizedEigenSolver_GeneralizedEigenSolver_MatrixType.out
*
* \sa compute() * \sa compute()
*/ */
GeneralizedEigenSolver(const MatrixType& A, const MatrixType& B, bool computeEigenvectors = true) GeneralizedEigenSolver(const MatrixType& A, const MatrixType& B, bool computeEigenvectors = true)
@ -160,7 +158,7 @@ template<typename _MatrixType> class GeneralizedEigenSolver
compute(A, B, computeEigenvectors); compute(A, B, computeEigenvectors);
} }
/** \brief Returns the computed generalized eigenvectors. /* \brief Returns the computed generalized eigenvectors.
* *
* \returns %Matrix whose columns are the (possibly complex) eigenvectors. * \returns %Matrix whose columns are the (possibly complex) eigenvectors.
* *
@ -175,12 +173,9 @@ template<typename _MatrixType> class GeneralizedEigenSolver
* matrix returned by this function is the matrix \f$ V \f$ in the * matrix returned by this function is the matrix \f$ V \f$ in the
* generalized eigendecomposition \f$ A = B V D V^{-1} \f$, if it exists. * generalized eigendecomposition \f$ A = B V D V^{-1} \f$, if it exists.
* *
* Example: \include GeneralizedEigenSolver_eigenvectors.cpp
* Output: \verbinclude GeneralizedEigenSolver_eigenvectors.out
*
* \sa eigenvalues() * \sa eigenvalues()
*/ */
//EigenvectorsType eigenvectors() const; // EigenvectorsType eigenvectors() const;
/** \brief Returns an expression of the computed generalized eigenvalues. /** \brief Returns an expression of the computed generalized eigenvalues.
* *
@ -198,9 +193,6 @@ template<typename _MatrixType> class GeneralizedEigenSolver
* so there are as many eigenvalues as rows in the matrix. The eigenvalues * so there are as many eigenvalues as rows in the matrix. The eigenvalues
* are not sorted in any particular order. * are not sorted in any particular order.
* *
* Example: \include GeneralizedEigenSolver_eigenvalues.cpp
* Output: \verbinclude GeneralizedEigenSolver_eigenvalues.out
*
* \sa alphas(), betas(), eigenvectors() * \sa alphas(), betas(), eigenvectors()
*/ */
EigenvalueType eigenvalues() const EigenvalueType eigenvalues() const
@ -253,9 +245,6 @@ template<typename _MatrixType> class GeneralizedEigenSolver
* generalized Schur decomposition. * generalized Schur decomposition.
* *
* This method reuses of the allocated data in the GeneralizedEigenSolver object. * This method reuses of the allocated data in the GeneralizedEigenSolver object.
*
* Example: \include GeneralizedEigenSolver_compute.cpp
* Output: \verbinclude GeneralizedEigenSolver_compute.out
*/ */
GeneralizedEigenSolver& compute(const MatrixType& A, const MatrixType& B, bool computeEigenvectors = true); GeneralizedEigenSolver& compute(const MatrixType& A, const MatrixType& B, bool computeEigenvectors = true);
@ -310,6 +299,8 @@ GeneralizedEigenSolver<MatrixType>::compute(const MatrixType& A, const MatrixTyp
if (m_realQZ.info() == Success) if (m_realQZ.info() == Success)
{ {
m_matS = m_realQZ.matrixS(); m_matS = m_realQZ.matrixS();
if (computeEigenvectors)
m_eivec = m_realQZ.matrixZ().transpose();
// Compute eigenvalues from matS // Compute eigenvalues from matS
m_alphas.resize(A.cols()); m_alphas.resize(A.cols());
@ -343,7 +334,6 @@ GeneralizedEigenSolver<MatrixType>::compute(const MatrixType& A, const MatrixTyp
return *this; return *this;
} }
} // end namespace Eigen } // end namespace Eigen
#endif // EIGEN_GENERALIZEDEIGENSOLVER_H #endif // EIGEN_GENERALIZEDEIGENSOLVER_H

View File

@ -0,0 +1,7 @@
GeneralizedEigenSolver<MatrixXf> ges;
MatrixXf A = MatrixXf::Random(4,4);
MatrixXf B = MatrixXf::Random(4,4);
ges.compute(A, B);
cout << "The (complex) numerators of the generalzied eigenvalues are: " << ges.alphas().transpose() << endl;
cout << "The (real) denominatore of the generalzied eigenvalues are: " << ges.betas().transpose() << endl;
cout << "The (complex) generalzied eigenvalues are (alphas./beta): " << ges.eigenvalues().transpose() << endl;