Я хотел бы получить собственные векторы разреженной симметричной матрицы с лучшей точностью, доступной в данный момент времени.
В настоящее время я использую следующие с scipy.sparse.eigsh
:python scipy eigs: вернуть собственный вектор после максимального количества итераций независимо от допуска сходимости
evals, evecs = eigsh(MyMatrix, 2,which='LM' ,tol=1.e-15, maxiter=1000000)
Если не сходится к tol
точности по maxiter
итераций, он поднимает ArpackNoConvergence
ошибку, которая содержит собственные векторы/значения, которые сходились, но не те, которые сделали не. Тем не менее, я предпочитаю иметь вектор с точностью 1.e-14
вместо 1.e-15
, а не без вектора вообще. Есть ли способ заставить возвращать собственные векторы, которые еще не сходились (возможно, с другой библиотекой)?
Как и в Matlab, где функция eigs
в любом случае возвращает собственные векторы, с дополнительным предупреждением, если желаемая точность не достигнута.
Спасибо!
Спасибо! Но я хочу получить доступ к вектору eingenvalue/vector, который был рассчитан и не полностью сходился. Исключение содержит только те, которые сходились к требуемой точности. Я хотел бы иметь лучшую точность в заданном количестве итераций. –
Я полагаю, что одним быстрым решением было бы итеративно уменьшить допуск до тех пор, пока 'eigs' больше не сходится в пределах указанного количества итераций. Кроме того, я думаю, что должно быть возможно получить частично сходящиеся собственные значения/векторы, вручную создав ['scipy.sparse.linalg.arpack._SymmetricArpackParams'] (https://github.com/scipy/scipy/blob /master/scipy/sparse/linalg/eigen/arpack/arpack.py#L370-L585), вызывая '.iterate()' на нем, а затем восстанавливая собственные значения/векторы, используя '.extract()', когда итерация не выполняется , –
Я попытаюсь обновить свой ответ, когда у меня будет время. –