Для симметричной разреженной квадратной матрицы размером 300 000 * 300 000, как лучше всего найти 10 наименьших собственных значений и соответствующие им собственные векторы в течение часа или около того на любом языке или в любом пакете.
Нахождение k-наименьших собственных значений и соответствующего им собственного вектора для большой матрицы
Ответы (1)
Алгоритм Ланцоша, работающий с эрмитовой матрицей, является хорошим способом найти наименьшее и наибольшее собственные значения и соответствующие собственные векторы. Обратите внимание, что реальная симметричная матрица по определению является эрмитовой. Ланцошу требуется O(N)
памяти, а также примерно O(N)
времени для оценки экстремальных собственных значений/собственных векторов. Это контрастирует с диагонализацией грубой силы, которая требует O(N^2)
памяти и O(N^3)
времени работы. По этой причине алгоритм Ланцоша сделал возможным приближенное решение многих задач, которые ранее были невозможны с вычислительной точки зрения.
Вот полезная ссылка на сайт Калифорнийского университета в Дэвисе, в котором перечислены реализации Lanczos на нескольких языках/пакетах, включая FORTRAN, C/C++ и MATLAB.
1e-6
или -1e-6
? (не знаю, насколько близки к нулю ваши электромобили)
- person chtz; 27.03.2019