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;
74 typedef typename NumTraits<Scalar>::Real
RealScalar;
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()),
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;
282 ColumnVectorType m_tmp;
296template<
typename MatrixType>
297GeneralizedEigenSolver<MatrixType>&
300 check_template_parameters();
304 eigen_assert(A.cols() == A.rows() && B.cols() == A.rows() && B.cols() == B.rows());
310 if (m_realQZ.info() ==
Success)
312 m_matS = m_realQZ.matrixS();
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;
\eigenvalues_module
Definition GeneralizedEigenSolver.h:58
GeneralizedEigenSolver & compute(const MatrixType &A, const MatrixType &B, bool computeEigenvectors=true)
Computes generalized eigendecomposition of given matrix.
Definition GeneralizedEigenSolver.h:298
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)
Sets the maximal number of iterations allowed.
Definition GeneralizedEigenSolver.h:259
Eigen::Index Index
Definition GeneralizedEigenSolver.h:75
_MatrixType MatrixType
Synonym for the template parameter _MatrixType.
Definition GeneralizedEigenSolver.h:62
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
EigenvalueType eigenvalues() const
Returns an expression of the computed generalized eigenvalues.
Definition GeneralizedEigenSolver.h:198
ComplexVectorType alphas() const
Definition GeneralizedEigenSolver.h:209
GeneralizedEigenSolver(Index size)
Default constructor with memory preallocation.
Definition GeneralizedEigenSolver.h:125
std::complex< RealScalar > ComplexScalar
Complex scalar type for MatrixType.
Definition GeneralizedEigenSolver.h:83
VectorType betas() const
Definition GeneralizedEigenSolver.h:220
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
CwiseBinaryOp< internal::scalar_quotient_op< ComplexScalar, Scalar >, ComplexVectorType, VectorType > EigenvalueType
Expression type for the eigenvalues as returned by eigenvalues().
Definition GeneralizedEigenSolver.h:101
GeneralizedEigenSolver()
Default constructor.
Definition GeneralizedEigenSolver.h:117
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
ComputationInfo info() const
Reports whether previous computation was successful.
Definition RealQZ.h:166
RealQZ & setMaxIterations(Index maxIters)
Sets the maximal number of iterations allowed to converge to one eigenvalue or decouple the problem.
Definition RealQZ.h:183
Pseudo expression representing a solving operation.
Definition Solve.h:63
ComputationInfo
Enum for reporting the status of a computation.
Definition Constants.h:430
@ Success
Computation was successful.
Definition Constants.h:432
Holds information about the various numeric (i.e.
Definition NumTraits.h:108
Definition inference.c:32