31 Eigen::MatrixBase<TDerivedA>
const& A,
33 Eigen::MatrixBase<TDerivedB>& B)
37 using ScalarType =
typename TDerivedA::Scalar;
39 Eigen::Matrix<ScalarType, TDerivedA::RowsAtCompileTime, TDerivedA::ColsAtCompileTime>;
40 case EEigenvalueFilter::None: {
44 case EEigenvalueFilter::SpdProjection: {
45 Eigen::SelfAdjointEigenSolver<MatrixType> eig{};
46 eig.compute(A, Eigen::ComputeEigenvectors);
47 if (eig.info() != Eigen::Success)
51 auto D = eig.eigenvalues();
52 auto V = eig.eigenvectors();
53 for (
auto i = 0; i < D.size(); ++i)
59 B = V * D.asDiagonal() * V.transpose();
60 return Eigen::Success;
62 case EEigenvalueFilter::FlipNegative: {
63 Eigen::SelfAdjointEigenSolver<MatrixType> eig{};
64 eig.compute(A, Eigen::ComputeEigenvectors);
65 if (eig.info() != Eigen::Success)
69 auto D = eig.eigenvalues();
70 auto V = eig.eigenvectors();
71 for (
auto i = 0; i < D.size(); ++i)
77 B = V * D.asDiagonal() * V.transpose();
80 default:
return false;