Mam program, który oblicza największą wartość własną spośród wielu rzeczywistych symetrycznych macierzy 50 x 50, wykonując dekompozycje o liczbie pojedynczej na wszystkich z nich. SVD stanowi wąskie gardło w programie.
Czy istnieją algorytmy, które są znacznie szybsze w znajdowaniu największej wartości własnej, czy też optymalizacja tej części nie przyniosłaby dużego zwrotu z inwestycji?
Odpowiedzi:
W zależności od precyzji wymaganej dla największej wartości własnej, możesz spróbować użyć iteracji mocy .
W twoim konkretnym przykładzie posunąłbym się do tego, aby nie formułować jawnie, ale obliczać x ← X ( X T x ) w każdej iteracji. Obliczenie A wymagałoby operacji O ( n 3 ) , podczas gdy iloczyn macierz-wektor wymaga tylko O ( n 2 ) .A=XXT x←X(XTx) A O(n3) O(n2)
Współczynnik konwergencji zależy od podziału między dwiema największymi wartościami własnymi, więc nie zawsze może to być dobre rozwiązanie,
źródło
źródło
źródło