Commit f4c2c441 authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #14089 from alalek:fix_14088

parents fdf63239 a7c4ee9a
...@@ -322,6 +322,8 @@ private: ...@@ -322,6 +322,8 @@ private:
// Fortran subroutine in EISPACK. // Fortran subroutine in EISPACK.
// Initialize // Initialize
const int max_iters_count = 1000 * this->n;
int nn = this->n; int nn = this->n;
int n1 = nn - 1; int n1 = nn - 1;
int low = 0; int low = 0;
...@@ -487,7 +489,9 @@ private: ...@@ -487,7 +489,9 @@ private:
} }
} }
iter = iter + 1; // (Could check iteration count here.) iter = iter + 1;
if (iter > max_iters_count)
CV_Error(Error::StsNoConv, "Algorithm doesn't converge (complex eigen values?)");
// Look for two consecutive small sub-diagonal elements // Look for two consecutive small sub-diagonal elements
int m = n1 - 2; int m = n1 - 2;
......
...@@ -519,4 +519,15 @@ TEST_P(Core_EigenZero, double) ...@@ -519,4 +519,15 @@ TEST_P(Core_EigenZero, double)
} }
INSTANTIATE_TEST_CASE_P(/**/, Core_EigenZero, testing::Values(2, 3, 5)); INSTANTIATE_TEST_CASE_P(/**/, Core_EigenZero, testing::Values(2, 3, 5));
TEST(Core_EigenNonSymmetric, convergence)
{
Matx33d m(
0, -1, 0,
1, 0, 1,
0, -1, 0);
Mat eigenvalues, eigenvectors;
// eigen values are complex, algorithm doesn't converge
EXPECT_THROW(cv::eigenNonSymmetric(m, eigenvalues, eigenvectors), cv::Exception); // exception instead of hang
}
}} // namespace }} // namespace
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment