Я выполняю повторные процедуры диагонализации матриц для небольших комплексных квадратных матриц (размерность <10), но обнаружил сбой в небольшой матрице с постоянными значениями.ComplexEigenSolver не сходится, возвращая пустые объекты для собственных значений и собственных векторов. </p>
Я проверил эту проблему, пытаясь решить матрицу со значениями все 1, но это прекрасно работает.Моя проблема должна быть связана с малыми значениями моей матрицы.
MatrixXcd matrix(2,2);
matrix(0,0) = std::complex<double>(1.4822e-322, 0);
matrix(0,1) = std::complex<double>(1.4822e-322, 0);
matrix(1,0) = std::complex<double>(1.4822e-322, 0);
matrix(1,1) = std::complex<double>(1.4822e-322, 0);
ComplexEigenSolver<MatrixXcd> ces;
ces.compute(matrix);
ces.eigenvalues();
ces.eigenvectors();
ces.info();
Это дает пустые собственные значения и собственные векторы и возвращает 2 из ces.info ().Я ожидаю, что он просто даст собственные значения с записями 0 и 2.96e-322 (масштабированная версия матрицы приведенных здесь: https://en.wikipedia.org/wiki/Matrix_of_ones)
Слишком малы значения?