11 #ifndef EIGEN_GENERALIZEDEIGENSOLVER_H 12 #define EIGEN_GENERALIZEDEIGENSOLVER_H 65 RowsAtCompileTime = MatrixType::RowsAtCompileTime,
66 ColsAtCompileTime = MatrixType::ColsAtCompileTime,
68 MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
69 MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
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);
274 ComplexVectorType m_alphas;
276 bool m_isInitialized;
277 bool m_eigenvectorsOk;
282 ColumnVectorType m_tmp;
296 template<
typename 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);
313 if (computeEigenvectors)
314 m_eivec = m_realQZ.
matrixZ().transpose();
317 m_alphas.
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 const MatrixType & matrixS() const
Returns matrix S in the QZ decomposition.
Definition: RealQZ.h:139
EigenvalueType eigenvalues() const
Returns an expression of the computed generalized eigenvalues.
Definition: GeneralizedEigenSolver.h:198
iterative scaling algorithm to equilibrate rows and column norms in matrices
Definition: TestIMU_Common.h:87
Holds information about the various numeric (i.e.
Definition: NumTraits.h:88
std::complex< RealScalar > ComplexScalar
Complex scalar type for MatrixType.
Definition: GeneralizedEigenSolver.h:83
RealQZ & setMaxIterations(Index maxIters)
Sets the maximal number of iterations allowed to converge to one eigenvalue or decouple the problem...
Definition: RealQZ.h:183
MatrixType::Scalar Scalar
Scalar type for matrices of type MatrixType.
Definition: GeneralizedEigenSolver.h:73
GeneralizedEigenSolver & compute(const MatrixType &A, const MatrixType &B, bool computeEigenvectors=true)
Computes generalized eigendecomposition of given matrix.
Definition: GeneralizedEigenSolver.h:298
GeneralizedEigenSolver & setMaxIterations(Index maxIters)
Sets the maximal number of iterations allowed.
Definition: GeneralizedEigenSolver.h:259
detail::size< coerce_list< Ts... >> size
Get the size of a list (number of elements.)
Definition: Size.h:56
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:107
_MatrixType MatrixType
Synonym for the template parameter _MatrixType.
Definition: GeneralizedEigenSolver.h:62
EIGEN_STRONG_INLINE void resize(Index nbRows, Index nbCols)
Resizes *this to a rows x cols matrix.
Definition: PlainObjectBase.h:235
CwiseBinaryOp< internal::scalar_quotient_op< ComplexScalar, Scalar >, ComplexVectorType, VectorType > EigenvalueType
Expression type for the eigenvalues as returned by eigenvalues().
Definition: GeneralizedEigenSolver.h:101
GeneralizedEigenSolver(Index size)
Default constructor with memory preallocation.
Definition: GeneralizedEigenSolver.h:125
const MatrixType & matrixZ() const
Returns matrix Z in the QZ decomposition.
Definition: RealQZ.h:129
ComputationInfo info() const
Reports whether previous computation was successful.
Definition: RealQZ.h:166
Matrix< ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime > EigenvectorsType
Type for matrix of eigenvectors as returned by eigenvectors().
Definition: GeneralizedEigenSolver.h:108
Computation was successful.
Definition: Constants.h:376
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
const MatrixType & matrixT() const
Returns matrix S in the QZ decomposition.
Definition: RealQZ.h:148
RealQZ & compute(const MatrixType &A, const MatrixType &B, bool computeQZ=true)
Computes QZ decomposition of given matrix.
Definition: RealQZ.h:557
GeneralizedEigenSolver(const MatrixType &A, const MatrixType &B, bool computeEigenvectors=true)
Constructor; computes the generalized eigendecomposition of given matrix pair.
Definition: GeneralizedEigenSolver.h:148
Definition: GeneralizedEigenSolver.h:57
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
ComputationInfo
Enum for reporting the status of a computation.
Definition: Constants.h:374
VectorType betas() const
Definition: GeneralizedEigenSolver.h:220
ComplexVectorType alphas() const
Definition: GeneralizedEigenSolver.h:209
Definition: osvr_print_tree.cpp:52
double Scalar
Common scalar type.
Definition: FlexibleKalmanBase.h:48
GeneralizedEigenSolver()
Default constructor.
Definition: GeneralizedEigenSolver.h:117