61 using RowMajor = Eigen::Matrix<TReal, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
62 using ColMajor = Eigen::Matrix<TReal, Eigen::Dynamic, Eigen::Dynamic>;
63 using Vector = Eigen::Matrix<TReal, Eigen::Dynamic, 1>;
64 const unsigned int n = A.rows();
66 Eigen::Map<const RowMajor> aMap(A.data_block(), n, n);
67 Eigen::Map<const RowMajor> bMap(B.data_block(), n, n);
69 const Eigen::GeneralizedSelfAdjointEigenSolver<ColMajor> solver(aMap, bMap);
71 if (solver.info() != Eigen::Success)
73 itkGenericExceptionMacro(<<
"GeneralizedEigenDecomposition: Eigen GeneralizedSelfAdjointEigenSolver failed: "
75 <<
"; A and B must be finite and B symmetric positive-definite.");
79 Eigen::Map<Vector>(
m_Eigenvalues.data_block(), n) = solver.eigenvalues();
81 Eigen::Map<RowMajor>(
m_Eigenvectors.data_block(), n, n) = solver.eigenvectors();
83 if (canonicalizeSigns)