mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
add EigenSolver::eigenvectors() method for non symmetric matrices.
However, for matrices larger than 5, it seems there is constantly a quite large error for a very few coefficients. I don't what's going on, but that's certainely not due to numerical issues only. (also note that the test with the pseudo eigenvectors fails the same way)
This commit is contained in:
@@ -138,10 +138,21 @@ template<typename MatrixType> void eigensolver(const MatrixType& m)
|
||||
VERIFY_IS_APPROX((symmA.template cast<Complex>()) * (ei0.pseudoEigenvectors().template cast<Complex>()),
|
||||
(ei0.pseudoEigenvectors().template cast<Complex>()) * (ei0.eigenvalues().asDiagonal()));
|
||||
|
||||
a = a + symmA;
|
||||
// a = a /*+ symmA*/;
|
||||
EigenSolver<MatrixType> ei1(a);
|
||||
|
||||
VERIFY_IS_APPROX(a * ei1.pseudoEigenvectors(), ei1.pseudoEigenvectors() * ei1.pseudoEigenvalueMatrix());
|
||||
IOFormat OctaveFmt(4, AlignCols, ", ", ";\n", "", "", "[", "]");
|
||||
// std::cerr << "==============\n" << a.format(OctaveFmt) << "\n\n" << ei1.eigenvalues().transpose() << "\n\n";
|
||||
// std::cerr << a * ei1.pseudoEigenvectors() << "\n\n" << ei1.pseudoEigenvectors() * ei1.pseudoEigenvalueMatrix() << "\n\n\n";
|
||||
|
||||
// VERIFY_IS_APPROX(a * ei1.pseudoEigenvectors(), ei1.pseudoEigenvectors() * ei1.pseudoEigenvalueMatrix());
|
||||
|
||||
|
||||
// std::cerr << a.format(OctaveFmt) << "\n\n";
|
||||
// std::cerr << ei1.eigenvectors().format(OctaveFmt) << "\n\n";
|
||||
// std::cerr << a.template cast<Complex>() * ei1.eigenvectors() << "\n\n" << ei1.eigenvectors() * ei1.eigenvalues().asDiagonal().eval() << "\n\n";
|
||||
VERIFY_IS_APPROX(a.template cast<Complex>() * ei1.eigenvectors(),
|
||||
ei1.eigenvectors() * ei1.eigenvalues().asDiagonal().eval());
|
||||
|
||||
}
|
||||
|
||||
@@ -155,6 +166,9 @@ void test_eigensolver()
|
||||
CALL_SUBTEST( selfadjointeigensolver(MatrixXcd(5,5)) );
|
||||
CALL_SUBTEST( selfadjointeigensolver(MatrixXd(19,19)) );
|
||||
|
||||
CALL_SUBTEST( eigensolver(Matrix4d()) );
|
||||
CALL_SUBTEST( eigensolver(Matrix4f()) );
|
||||
// FIXME the test fails for larger matrices
|
||||
// CALL_SUBTEST( eigensolver(MatrixXd(7,7)) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user