11 #ifndef EIGEN_GENERALIZEDEIGENSOLVER_H
12 #define EIGEN_GENERALIZEDEIGENSOLVER_H
65 RowsAtCompileTime = MatrixType::RowsAtCompileTime,
66 ColsAtCompileTime = MatrixType::ColsAtCompileTime,
67 Options = MatrixType::Options,
68 MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
69 MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
73 typedef typename MatrixType::Scalar
Scalar;
75 typedef typename MatrixType::Index Index;
126 : m_eivec(size, size),
129 m_isInitialized(false),
130 m_eigenvectorsOk(false),
149 : m_eivec(A.rows(), A.cols()),
152 m_isInitialized(false),
153 m_eigenvectorsOk(false),
155 m_matS(A.rows(), A.cols()),
158 compute(A, B, computeEigenvectors);
200 eigen_assert(m_isInitialized &&
"GeneralizedEigenSolver is not initialized.");
211 eigen_assert(m_isInitialized &&
"GeneralizedEigenSolver is not initialized.");
222 eigen_assert(m_isInitialized &&
"GeneralizedEigenSolver is not initialized.");
253 eigen_assert(m_isInitialized &&
"EigenSolver is not initialized.");
254 return m_realQZ.
info();
267 static void check_template_parameters()
269 EIGEN_STATIC_ASSERT_NON_INTEGER(
Scalar);
276 bool m_isInitialized;
277 bool m_eigenvectorsOk;
278 RealQZ<MatrixType> m_realQZ;
281 typedef Matrix<Scalar, ColsAtCompileTime, 1, Options & ~RowMajor, MaxColsAtCompileTime, 1> ColumnVectorType;
282 ColumnVectorType m_tmp;
296 template<
typename MatrixType>
297 GeneralizedEigenSolver<MatrixType>&
300 check_template_parameters();
304 eigen_assert(A.cols() == A.rows() && B.cols() == A.rows() && B.cols() == B.rows());
308 m_realQZ.compute(A, B, computeEigenvectors);
310 if (m_realQZ.info() ==
Success)
312 m_matS = m_realQZ.matrixS();
313 if (computeEigenvectors)
314 m_eivec = m_realQZ.matrixZ().transpose();
317 m_alphas.resize(A.cols());
318 m_betas.resize(A.cols());
322 if (i == A.cols() - 1 || m_matS.coeff(i+1, i) ==
Scalar(0))
324 m_alphas.coeffRef(i) = m_matS.coeff(i, i);
325 m_betas.coeffRef(i) = m_realQZ.matrixT().coeff(i,i);
330 Scalar p =
Scalar(0.5) * (m_matS.coeff(i, i) - m_matS.coeff(i+1, i+1));
331 Scalar z = sqrt(abs(p * p + m_matS.coeff(i+1, i) * m_matS.coeff(i, i+1)));
332 m_alphas.coeffRef(i) =
ComplexScalar(m_matS.coeff(i+1, i+1) + p, z);
333 m_alphas.coeffRef(i+1) =
ComplexScalar(m_matS.coeff(i+1, i+1) + p, -z);
335 m_betas.coeffRef(i) = m_realQZ.matrixT().coeff(i,i);
336 m_betas.coeffRef(i+1) = m_realQZ.matrixT().coeff(i,i);
342 m_isInitialized =
true;
343 m_eigenvectorsOk =
false;
350 #endif // EIGEN_GENERALIZEDEIGENSOLVER_H
GeneralizedEigenSolver(Index size)
Default constructor with memory preallocation.
Definition: GeneralizedEigenSolver.h:125
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
Definition: NumTraits.h:88
GeneralizedEigenSolver()
Default constructor.
Definition: GeneralizedEigenSolver.h:117
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:107
EigenvalueType eigenvalues() const
Returns an expression of the computed generalized eigenvalues.
Definition: GeneralizedEigenSolver.h:198
VectorType betas() const
Definition: GeneralizedEigenSolver.h:220
_MatrixType MatrixType
Synonym for the template parameter _MatrixType.
Definition: GeneralizedEigenSolver.h:62
CwiseBinaryOp< internal::scalar_quotient_op< ComplexScalar, Scalar >, ComplexVectorType, VectorType > EigenvalueType
Expression type for the eigenvalues as returned by eigenvalues().
Definition: GeneralizedEigenSolver.h:101
RealQZ & setMaxIterations(Index maxIters)
Definition: RealQZ.h:183
GeneralizedEigenSolver & compute(const MatrixType &A, const MatrixType &B, bool computeEigenvectors=true)
Computes generalized eigendecomposition of given matrix.
Definition: GeneralizedEigenSolver.h:298
ComputationInfo info() const
Reports whether previous computation was successful.
Definition: RealQZ.h:166
Matrix< ComplexScalar, ColsAtCompileTime, 1, Options &~RowMajor, MaxColsAtCompileTime, 1 > ComplexVectorType
Type for vector of complex scalar values eigenvalues as returned by betas().
Definition: GeneralizedEigenSolver.h:97
GeneralizedEigenSolver(const MatrixType &A, const MatrixType &B, bool computeEigenvectors=true)
Constructor; computes the generalized eigendecomposition of given matrix pair.
Definition: GeneralizedEigenSolver.h:148
GeneralizedEigenSolver & setMaxIterations(Index maxIters)
Definition: GeneralizedEigenSolver.h:259
Matrix< Scalar, ColsAtCompileTime, 1, Options &~RowMajor, MaxColsAtCompileTime, 1 > VectorType
Type for vector of real scalar values eigenvalues as returned by betas().
Definition: GeneralizedEigenSolver.h:90
MatrixType::Scalar Scalar
Scalar type for matrices of type MatrixType.
Definition: GeneralizedEigenSolver.h:73
Matrix< ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime > EigenvectorsType
Type for matrix of eigenvectors as returned by eigenvectors().
Definition: GeneralizedEigenSolver.h:108
Definition: Constants.h:376
Computes the generalized eigenvalues and eigenvectors of a pair of general matrices.
Definition: GeneralizedEigenSolver.h:57
ComputationInfo
Definition: Constants.h:374
std::complex< RealScalar > ComplexScalar
Complex scalar type for MatrixType.
Definition: GeneralizedEigenSolver.h:83
ComplexVectorType alphas() const
Definition: GeneralizedEigenSolver.h:209