У меня есть программа, которая вычисляет наибольшее собственное значение из многих вещественных симметричных матриц 50x50, выполняя разложения по сингулярным числам для всех из них. SVD является узким местом в программе.
Существуют ли алгоритмы, которые намного быстрее находят наибольшее собственное значение, или оптимизация этой части не даст большой отдачи от инвестиций?
Ответы:
В зависимости от точности, требуемой для наибольшего собственного значения, вы можете попробовать использовать Power Iteration .
Для вашего конкретного примера я бы зашел так далеко, что явно не формировал , а вычислял x ← X ( X T x ) в каждой итерации. Вычисление A потребует O ( n 3 ) операций, тогда как произведение матрицы на вектор требует только O ( n 2 )A = XИксT х ← х( ХTх ) A O ( n3) O ( n2) .
Скорость сходимости зависит от разделения между двумя самыми большими собственными значениями, поэтому это не может быть хорошим решением во всех случаях,
источник
источник
Note that you need not explicitly formA−μI because (A−μI)x=X(XTx)−μx can still be computed with O(n2) усилия.
источник