Judge unitary-ness relative to scaling.

(cherry picked from commit c1d637433e3b3f9012b226c2c9125c494b470ae6)
This commit is contained in:
Antonio Sánchez 2024-04-30 22:28:46 +00:00 committed by Antonio Sanchez
parent c7f6f8315f
commit 6aa0143851

View File

@ -25,6 +25,7 @@ template<typename MatrixType> void selfadjointeigensolver_essential_check(const
VERIFY_IS_EQUAL(eiSymm.info(), Success);
RealScalar scaling = m.cwiseAbs().maxCoeff();
RealScalar unitary_error_factor = RealScalar(16);
if(scaling<(std::numeric_limits<RealScalar>::min)())
{
@ -36,7 +37,7 @@ template<typename MatrixType> void selfadjointeigensolver_essential_check(const
(eiSymm.eigenvectors() * eiSymm.eigenvalues().asDiagonal())/scaling);
}
VERIFY_IS_APPROX(m.template selfadjointView<Lower>().eigenvalues(), eiSymm.eigenvalues());
VERIFY_IS_UNITARY(eiSymm.eigenvectors());
VERIFY(eiSymm.eigenvectors().isUnitary(test_precision<RealScalar>() * unitary_error_factor));
if(m.cols()<=4)
{
@ -62,7 +63,7 @@ template<typename MatrixType> void selfadjointeigensolver_essential_check(const
VERIFY_IS_APPROX(m.template selfadjointView<Lower>().eigenvalues()/scaling, eiDirect.eigenvalues()/scaling);
}
VERIFY_IS_UNITARY(eiDirect.eigenvectors());
VERIFY(eiDirect.eigenvectors().isUnitary(test_precision<RealScalar>() * unitary_error_factor));
}
}