QR Algorithm for the Computation of the Eigenvalues Maciej Kluczny Mateusz Kramarczyk AGH University of Science and Technology 26 marca 2006 Streszczenie W niniejszym dokumencie postaraliśmy się przedstawić opis iteracyjnej metody QR wyznaczania wartości własnych dużych macierzy kwadratowych. Przedstawiony został również cały aparat matematyczny (głównie algebraiczny) potrzebny do zrozumienia niniejszego dokumentu poczynając na macierzach i definicji wartości własnych na opisie właściwego algorytmu QR kończąc. W końcu przedstawiony też został prosty przykład praktycznego wykorzystania zdobytej po przeczytaniu tego dokumentu wiedzy oraz różne sposoby prowadzące do ulepszenia właściwej metody QR. Tekst dostępny również na stronie: http://www.nic-nac-project.de/~leoha/qralgorithm/ 1 Spis treści 1 Wstęp teoretyczny 1.1 Podstawy algebraiczne . . . . . . . . . . . . 1.1.1 Macierz symetryczna . . . . . . . . . 1.1.2 Macierz transponowana . . . . . . . 1.1.3 Macierz ortogonalna . . . . . . . . . 1.1.4 Macierz Hermite’a . . . . . . . . . . 1.1.5 Macierz unitarna . . . . . . . . . . . 1.1.6 Macierz normalna . . . . . . . . . . 1.1.7 Macierz Hessenberga . . . . . . . . . 1.1.8 Wartości i wektory własne macierzy 1.2 Dekompozycja QR (QR factorization) . . . 1.2.1 Refleksja Householdera . . . . . . . 1.2.2 Ortogonalizacja Gram-Schmidt’a . . 1.2.3 Rotacja Givensa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 3 3 3 4 4 4 4 5 5 7 7 2 Algorytm właściwy 2.1 Algorytm podstawowy . . . . . . . . . . . . . . . . . . . . 2.2 Algortym z wykorzystaniem macierzy Hessenberga . . . . 2.3 Algorytm z wykorzystaniem przesunięć wartości własnych 2.4 Porównanie różnych wariantów algorytmu QR . . . . . . . . . . . . . . . . . . . . . . . 8 8 10 11 12 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Wstęp teoretyczny Podstawy algebraiczne W tym rozdziale umieścilismy niezbędne definicje twierdzenia etc. potrzebne do zrumienia poniższego tekstu. Podrozdział ten należy traktować jako pewnego rodzaju swoiste kompendium wiedzy, szczególnie dla tych, którzy z tą tematyką nie mieli wcześniej do czynienia. Oto ważniejsze definicje, określenia, które mogą być przydatne: 1.1.1 Macierz symetryczna Macierz A nazywamy macierzą symetryczną jeżeli spełnia ona następujący warunek: ∀i,j (aij = aji ) ⇔ AT = A 1.1.2 Macierz transponowana Macierz transponowana macierzy A = [aij ]n,m to macierz powstała w wyniku zamiany odpowiednich wierszy i kolumn: AT = [aij ]m,n 1.1.3 Macierz ortogonalna Macierz A jest macierzą ortogonalną jeżeli spełnia zależność: AAT = I gdzie I jest macierzą jednostkową. Innymi słowy iloczyn skalarny dowolnych dwóch wierszy (kolumn) jest równy zero, natomiast iloczyn skalarny dowolnego wiersza (kolumny) jest równy jeden. 1.1.4 Macierz Hermite’a Mówimy, że macierz A jest macierzą Hermite’a (hermitianem), jeżeli jest ona macierzą kwadratową, symetryczną oraz określoną na zbiorze liczb zespolonych, dla której: ∀i,j (aij = aji ) gdzie aji jest liczbą sprzężoną do liczby aji . Macierz Hermite’a oznaczamy zazwyczaj symbolami : A∗ , AT , A† , oraz AH Jeżeli elementy macierzy A należą do zbioru liczb rzeczywistych to macierz Hermite’a odpowiada macierzy symetrycznej. Bardzo ważną własnością macierzy Hermite’a jest to, że jej wartości własne sa zawsze liczbami rzeczywistymi oraz fakt, że wektory główne są ortogonalne. Jednakże ostatnia własność jest spełniona jedynie w przypadku gdy macierz jest macierzą diagonalizowalną. 3 1.1.5 Macierz unitarna Jest to macierz będąca macierzą kwadratową, określona na zbiorze liczb zespolonych oraz mająca własność: AAH = I W przypadku liczb rzeczywistych macierz unitarna sprowadza się do macierzy ortogonalnej. 1.1.6 Macierz normalna Macierz A jest macierzą normalną jeśli jest spełniona następująca zależność: AAH = AH A 1.1.7 Macierz Hessenberga Jest to macierz trójkątna górna (dolna), która bezpośrednio pod(nad) diagonalą posiada dodatkową przekątkną. X X X X X X X X X X 0 X X X X 0 0 X X X 0 0 0 X X 1.1.8 Wartości i wektory własne macierzy Mówimy, że dana macierz A n × n ma wektor własny v i odpowiadającą mu wartość własną λ, jeżeli Av = λv aby obliczyć wartości własne macierzy A należy rozwiązać równanie det(A − λI) = 0 Wartości własne są niezmiennikiem danej macierzy, dla każdej macierzy Q podobnej do macierzy A wartości własny tych macierzy bedą takie same. Jeżeli pomnożymy macierz A przez dowolną liczbę ϑ to wartości własne macierzy ϑA bedą równe wartością własnym macierzy A pomnożonymi przez liczbę ϑ: (1) (2) (n) λϑA = [λϑA , λϑA , . . . , λϑA ] = ϑλA natomiast wektory własne obu macierzy nie zmieniają się, operacja ta nazywa sie przesuwaniem wartości własnych macierzy Reasumując, jeśli odejmniemy od macierzy A macierz A − ϑI, to i-ta wartość własna λ macierzy A bedzie równa λi − ϑ. 4 1.2 Dekompozycja QR (QR factorization) Dekompozycja macierzy polega na przedstawieniu jej w postaci iloczynu dwóch innych specyficznych macierzy. Istnieje kilka takich dekompozycji, które znalazły szczególne zastosowania. Jedną z takich dekompozycji jest na przykład faktoryzacja LU: A = L · U. Macierz A jest przedstawiona tutaj jako iloczyn dolnej macierzy trójkątnej L oraz górnej macierzy trójkątnej R. Dodatkowo jeśli macierz L ma na przekątnej tylko jedynki faktoryzacja ta zwana jest dekompozycją Doolittle’a. Dodatkowo jeśli również macierz R ma na diagonali same jedynki jest to faktoryzacja Crout’a. Ponadto jeśli L = U T jest to dekompozycja Cholesky’iego. Jak łatwo zauważyć dekompozycji może być nieskończenie wiele jednak, mało które są do czegokolwiek przydatne, dlatego nawet drobne, subtelne różnice jak w tym przykladzie dekompozycji LU maja swoje zastosowania stąd też mają one nawet inne nazwy choć w rzeczywistości są prawie identyczne (implementacja zaś z koleji jest całkiem różna). Na przykład dekompozycja PA jest niczym innym jak dekompozycją LU jednakże z zastosowaniem pivotingu. Zainteresowanych bliżej zagadnieniami dekompozycji odsyłamy do odpowiedniej literatury. Istnieje inna bardzo przydatna dekompozycja, tak zwana faktoryzacja QR. Dekompozycja QR macierzy rzeczywistej A jest dekompozycją na dwie inne macierze oznaczone odpowiednio Q oraz R, gdzie macierz Q jest ortogonalna, natomiast R jest górną macierzą trójkątną, co można zapisać: A = Q · R. Przy dodatkowym zalożeniu, że elementy na diagonali macierzy R powinny być dodatnie faktoryzacja QR jest jednoznaczna. Dekompozycja QR jest często używana do rozwiązywania liniowego problemu najmniejszych kwadratów, jest również podstawą do iteracyjnego liczenia wartości własnych macierzy. Istnieje kilka metod w jaki można rozłożyć macierz na odpowiednie macierze Q oraz R. Kolejno zostaną przedstawione najbardziej użyteczne. 1.2.1 Refleksja Householdera Metoda Householdera zwana również transformacją Householdera lub refleksją (odbiciem) Housoldera jest najczęściej używaną metodą dekompozycji QR. Kluczowym obiektem jest tutaj macierz oznaczona symbolicznie H - symetryczna i ortogonalna zwana macierzą Householdera. Jest to macierz przekształcenia wektora, które odbija go względem pewnej płaszczyzny. Macierz ma następującą postać: H = I − 2xxT gdzie I jest macierzą jednostkową oraz x jest znormalizowanym wektorem spełniającym równanie: kxk2 = xT x = 1. 5 Użyta tutaj norma jest normą euklidesową czyli po prostu długościa wektora (jeśli jego współrzędne są rzeczywiste). Transformacja Householdera zeruje m−1 ostatnich elementów w wektorze (kolumnie) poniżej pierwszego elementu: v1 c v2 0 .. → .. . . 0 vm gdzie: v um uX v2 . c = ±|v| = ±t i i=1 Łatwo sprawdzić, że: v1 − c v2 x=f . .. vm gdzie: f=p 1 . 2c(c − v1 ) Aby zastosować dekompozycję dla macierzy A = QR o wymiarach m × n (m ­ n) kontruujemy macierz H (1) o wymiarach m × m by zamienić m − 1 ostatnich elementów pierwszej kolumny na zera. Podobnie skontruowana macierz G(2) o wymiarach (m − 1) × (m − 1) zamieni m − 2 elementów drugiej kolumny na zera. Za pomocą macierzy G(2) tworzymy macierz m × m: 1 0 ... 0 0 H (2) = . . (2) .. G 0 Po n takich ortogonalnych przekształceniach (n − 1 w przypadku, gdy m = n) otrzymamy: R = H (n) . . . H (2) H (1) A. R jest górną macierzą trójkątną; ortogonalną macierz Q otrzymamy z iloczynu: Q = H (1) H (2) . . . H (n) . Z równości: A = QR = H (1) H (2) . . . H (n) H (n) . . . H (2) H (1) wyraźnie widać dlaczego metoda zwana jest też refleksją. W praktyce macierze H (i) nigdy nie są jawnie liczone. 6 1.2.2 Ortogonalizacja Gram-Schmidt’a Każdy zbiór liniowo niezależnych wektorów v1 , . . . , vn może zostać „skonwertowany” do zbioru ortogonalnych wektorów q1 , . . . , qn poprzez proces GramSchmidt’a. Rozpatrzmy sytuacje dla trzech wymiarów; wektor v1 wyznacza prostą; wektory v1 i v2 wyznaczają płaszczyznę. Wektor q1 jest wektorem jednostkowym równoległym do wektora v1 . Wektor (jednostkowy) q2 leży na płaszczyźnie wektorów v1 ,v2 i jest normalny do wektora v1 . Wektor (jednostkowy) q3 jest normalny do płaszczyzny wektorów v1 , v2 etc. W ogólnosci przyjmujemy, że u1 = v1 , a każdy kolejny wektor ui jest ortogonalny do pozostałych u1 , . . . , ui−1 : ui = v i − i=1 X j=1 uj uTj vi . uTj uj Baza i wektorów ui generuje tą sama podprzestrzeń co baza wektorów vi . Wektory qi = kuuii k sa ortonormalne. To prowadzi do następującego twierdzenia: Każda macierz A o wymiarach m × n z liniowo niezależnymi kolumnami (wektorami) może być zdekomponowana w iloczyn A = QR, gdzie kolumny macierzy Q są ortonormalne, a macierz R jest górna trójkątna i odwracalna. 1.2.3 Rotacja Givensa Niech dana będzie macierz A o wymiarach m × n (m ­ n). Dekompozycja QR wymaga wyznaczenia ortogonalnej macierzy Q takiej, że: R T Q A= 0 a R jest górną macierzą trójkątną n × n. A następnie rozwiązania układu Rx = P y, gdzie P jest macierzą n pierwszych wierszy Q. Transformacja Householdera „czyści” całe kolumny z wyjątkiem pierwszego elementu wektora. Jeśli chcemy „wyczyścić” część macierzy zerując naraz tylko jeden element kolumny możemy użyć rotacji Givensa, która jest szczególnie wdzięczna do równoległej implementacji. Macierz: 1 ... 0 ... 0 ... 0 .. . . .. .. .. . . . . . 0 . . . c . . . s . . . 0 .. .. .. .. G = ... . . . . 0 . . . −s . . . c . . . 0 . .. .. . . .. .. . . . . 0 ... 0 ... 0 ... 1 z odpowiednio dobranym c = cos(ϕ) oraz s = sin(ϕ) dla pewnych kątów ϕ może zostać użyta do wyzerowania elementu aki . 7 Elementy moga być zerowane kolumna po kolumnie od dołu w następującej kolejności: (m, 1), (m − 1, 1), . . . , (2, 1), (m, 2), . . . , (3, 2), . . . , (m, n), . . . , (n + 1, n). Wtedy Q jest iloczynem g = (2m + n + 1)/2 macierzy Givensa Q = G1 G2 . . . Gg Na przykład do anihilacji dolnego elementu wektora 2 × 1: c −s s c T a r = b 0 z warunków sa + cb = 0 oraz c2 + s2 = 1 dostajemy: c= √ 2 2.1 a b . ,s = √ a2 + b a a2 + b 2 Algorytm właściwy Algorytm podstawowy Algorytm znajdowania wartości własnych QR wymaga aby dana macierz A, była macierzą kwadratową n × n określoną na liczbach rzeczywistych. Algorytm polega na iteracyjnym wykonywaniu określonych czynnosci aż do otrzymania macierzy trojkątniej górnej podobnej do macierzyA która na diagonali zawiera wartości własne. c0 równą macierzy jednostkowej W pierwszym kroku definiujemy macierz Q oraz macierz D1 równą macierzy A c0 = I Q D1 = A następnie wykonujemy dekompozycję macierzy A za pomocą algorytmu dekompozycji QR, otrzymujemy c1 R1 A=Q (1) c1 jest macierzą ortogonalną, natomiast R1 jest macierzą trójgdzie macierz Q c1 oraz traktując ją jako macierz przejścia kątną górną. Mając daną macierz Q znajdujemy za pomocą transformacji macierzy podobnej macierz A1 podobną do macierzy A. A1 = Q1 −1 AQ1 (2) mnożąc obustronnie (1) przez Q1 −1 otrzymujemy: Q1 −1 A = R1 łącząc (2) z (3) otrzymujemy A1 = R 1 Q1 8 (3) Jeżeli otrzymana macierz A1 nie jest macierzą trójkątną górną (z zadanym przybliżeniem) to musimy przejść do kolejnego kroku iteracyjnego, w którym przyjmujemy, że D2 = AQ1 Ponieważ macierz D2 oraz A1 są macierzami tego samego odwzorowana, różnią się jedynie bazami. w następnym kroku dokonujemy dekompozycji QR obu tych macierzy, w wyniku której otrzymujemy rownania c2 R2 D2 = Q A1 = Q 2 R2 gdzie macierz R2 w obu przypadkach jest taka sama. Wykonując proste obliczenia otrzymujemy macierz A2 Q2 −1 A1 = R2 A2 = Q2 −1 A1 Q2 = R2 Q2 Jeżeli otrzymana macierz A2 nie jest macierzą trójkątną górną kontynuujemy interacje. Przechodząc do m-tego kroku mamy daną macierz Am−1 , a następnie wykonując te same operacje otrzymujemy równania Am−1 = Qm Rm Am = R m Qm gdzie b m = Q 1 Q2 Q3 . . . Qm Q natomiast Qi reprezentuje zmianę współrzędnych w i-tym kroku. Cały algorytm można zapisać w postaci uproszczonej. Przyjmujemy sobie w kroku zerowym, macierz A0 równą macierzy A, następnie otrzymujemy c1 R1 A1 = Q 1 R1 = Q c2 R2 A2 = Q 1 R1 Q1 R1 = Q 1 Q2 R2 R1 = Q ... Am = ( m Y i=1 Qi )( 1 Y k=m d Rk ) = Q m Rm Przedstawiony powyżej algorytm ma jedną poważną wadę - jest mało wydajny, algorytm ten wymaga O(n3 ) operacji mnożenia, istnieje jednak kilka ulepszeń, które znacznie poprawiaja jego szybkość. Metody usprawniające działanie tego algorytmu są wyjaśnione w dalszej części pracy. 9 przykład: Mając dana macierz P wykonujemy kolejne kroki w algorytmie. 1 2 5 5 8 6 , 8 6 7 dokonujemy dekompozycji QR macierzy A −0.1054 −0.2673 −0.9578 −9, 4868 −9, 4868 −9, 5922 A = Q1 R1 = −0, 5270 −0, 8018 0, 2817 0 −3, 7417 −2, 4054 −0.8433 0.5345 0.0563 0 0 −3, 4933 Następnie znajdujemy macierz A1 podobną do macierzy A względem macierzy przejścia Q1 , powinna być ona równa macierzy otrzymanej z R1 A1 . 14.0889 5.0146 6.9547 4.0004 1.7143 −0.9186 ≡ R1 Q1 A1 = Q−1 1 AQ1 = 2.9458 −1.8672 0.1968 Ponieważ macierz A1 nie jest macierzą trójkątną górną przechodzimy do następnej iteracji. Rozdzielamy używając dekompozycji QR macierz A1 na macierz unitarną Q2 oraz macierz trójkątkną górną R2 −0.9431 −0.1624 −0.2902 −14.9391 −4.8200 −6.3517 A1 = Q2 R2 = −0.2678 −0.1467 0.9522 0 −2.8877 −0.8025 −0.1972 0.9758 0.0949 0 0 −2.8744 następnie obliczamy macierz A2 16.6321 −3.0651 −0.8568 0.9315 −0.3594 −2.8259 A2 = Q−1 2 A1 Q2 = R 2 Q2 = 0.5668 −2.8047 −0.2727 Wykonując te same obliczenia za każdym krokiem iteracyjnym macierz A n dązy do macierzy trójkątnej górnej, która na diagonali posiada wartości własne. W powyższym przypadku wykonując 68 iteracji otrzmymamy wartości własne z dokladnością do 4 cyfry po przecinku. λ = [16.4536, −2.9814, 2.5278] 2.2 Algortym z wykorzystaniem macierzy Hessenberga Bardzo prostym ulepszeniem algorytmu podstawowego QR jest użycie w nim macierzy Hessenberg’a. Ogromną zaletą macierzy Hessenberga jest fakt, iż ilość operacji mnożenia w pojedyńczej iteracji w algorytmie QR wynosi O(n2 ) zamiast O(n3 ), oraz to, że macierz Hessenberga zachowuje swoją postać podczas kolejnych iteracji QR. 10 Twierdzenie 1. Dla dowolnej macierzy A n × n istnieje podobna unitarnie do niej macierz Hessenberga, która może być skonstruowana kosztem 5n 3 /3 operacji mnożenia. Jeżeli dodatkowo macierz A jest macierzą Hermite’a to kosz maleje do poziomu 2n3 /3 oraz ilość operacji mnożenia w jednej iteracji w algorytmie QR maleje o jeden rząd, czyli wynosi O(n). 2.3 Algorytm z wykorzystaniem przesunięć wartości własnych Chociaż algorytm bazujący na macierzach Hessenberga działa znacznie szybciej od algorytmu QR w formie podstawowej to mimo wszystko w niektórych przypadkach współczynnik zbiegania się elementów znajdujących się na pod(k) diagonali jest zbyt wolne. Dla elementu ai,i+1 w k-tym kroku ów współczynnik λi k wynosi ( λi−1 ) , co w przypadku gdy wartości własne λi oraz λi−1 mają zbliżone wartości jest przyczyną powolnego zbiegania się algorytmu QR do szukanych wartości. Aby uniknąć powyższej sytuacji stosuje się w każdym kroku iteracyjnym przesunięcia wektorów własnych Ak − ϑ k I = Q k Rk Ak+1 = Rk Qk + ϑk I dzięki czemu współczynnik ψ równy (k) (k) zbiegania się elementu ai,i+1 pod diagonalą jest ψ (k) = λi+1 − ϑk λi − ϑ k Łatwo można zauważyć, że jeżeli wartość współczynnika zbieżności ψ (k) dąży do 0 to ϑk dąży do λi . lim ψ (k) = 0 ⇒ lim ϑk = λi n→∞ n→∞ Oczywistym wnioskiem, który można wyciągnąć z powyższej zależności jest możliwość osiągnięcia zbieżności liniowej, a nawet kwadratowej. Algorytm polega na tym, że najpierw skupiamy się na wartości własnej λn i na jego podstawie obliczamy współczynnik ψ (k) . Jeżeli λn zostanie obliczona z zadowalającą nas precyzją to przechodzimy do obliczania wartości λn−1 , operacje powtarzamy aż do uzyskania wszystkich wartości własnych. Początkowo za element ψ (k) wy(k) bierano element ann macierzy, jednakże Wilkinson w 1965 roku zauważył, żę lepszym rozwiązaniem będzie wybranie wartości własnej z minora o wymiarach (k) (k) 2 × 2 zawierającego na diagonali wartości an−1,n−1 oraz an,n . Konsekwencją wyboru algorytmu z przesunięciami wartości własnych jest brak uporządkowania wartości własnych na diagonali, zazwyczaj największe wartości własne są na początku. # " (k) (k) an−1,n−1 an−1,n (k) (k) an,n−1 an,n 11 Algorytm QR z przesunięciami dla wcześniej zaprezentowanego przykładu oblicza wartości własne z precyzją do 4 miejsc po przecinku w 6 iteracjach co jest ponad 10 krotnym przyspieszeniem i to jedynie dla macierzy 4 wymiarowej. 2.4 Porównanie różnych wariantów algorytmu QR Aby zobrazować działanie przedstawionych algorytmów znajdowania wartości własnych opartych na algorytmie QR przeprowadziliśmy testy, w których obliczaliśmy wartości własne macierzy CAN 61 1 , która jest macierzą o wymiarach 61 × 61. Miarą zbieżności algorytmu jest współczynnik zbieżności ψ równy: ψ= (m) max ν k∈1,...,n−1 k (m) gdzie νk jest k-tym elementem na poddiagonali, w m-tym kroku iteracyjnym. Widać gołym okiem, iż najstabilniej zachowującym się algorytmem jest algorytm QR z przesunięciami, również najszybciej, w sensie ilości iteracji, osiąga on określoną dokładność. Najmniej stabilnie zachowuje się algorytm z wykorzystaniem macierzy Hessenberga, jednak mimo tego, że wymaga on większej ilośći iteracji to i tak sam algorytm działa znacznie szybciej, co wynika z szybszego działania algorytmu dekompozycji dla macierzy Hessenberga. 4.5 Algorytm podstawowy Algorytm z macierzami Hessenberga Algorytm z przesunieciami 4 3.5 Zbieznosc 3 2.5 2 1.5 1 0.5 0 0 100 200 300 400 Kolejne iteracje algorytmu 500 1 http://math.nist.gov/MatrixMarket/data/Harwell-Boeing/cannes/ 12 600 700 800 Literatura [1] William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery, Numerical Recipies in C [2] J. Stoer, R. Bulirsch, Introduction to numerical analysis [3] David S. Watkins, Understanding the QR Algorithm, Society for Industrial and Applied Mathematics Review, Vol. 24, No. 4. (Oct., 1982), pp. 427-440. [4] Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms [A] PlanetMath.org [B] Wikipedia.org 13