W tym rozdziale zajmiemy się jeszcze innymi nich dotychczas poznanymi metodami znajdowania wartości i wektorów własnych. Ponieważ duże znaczenie mają w nich obroty płaszczyzn, zaczniemy właśnie od definicji tych przekształceń, ich własności i pierwszych zastosowań.
Macierz obrotu o kąt w płaszczyźnie rozpiętej na
wersorach
, gdze
, jest postaci
![]() |
Macierz ta różni się od jednostkowej jedynie wyrazami
oraz
.
łatwo sprawdzić, że
jest przekształceniem
ortogonalnym,
W obliczeniach numerycznych macierze obrotu służą najczęściej
do wyzerowania określonej współrzędnej danego wektora.
Rzeczywiście, obracając wektor
w płaszczyźnie rozpiętej na
i
zmieniamy
jedynie współrzędne
-tą i
-tą. Dokładniej,
, gdzie
![]() |
Stąd, przyjmując
![]() |
albo liczby do nich przeciwne, dostajemy
albo
, oraz
. Z powyższych wzorów
wynika, że kąt obrotu
można zawsze
tak dobrać, aby
.
Przekształcenia tak określone nazywamy obrotami Givensa.
Zauważmy, że stosując obroty Givensa kolejno
w płaszczyznach rozpiętych na wektorach
i
dla
możemy
przekształcić dany wektor
na kierunek pierwszego
wersora, tzn.
![]() |
Takie operacje wymagają wykonania mnożeń/dodawań i
pierwiastkowań. Przypomnijmy, że ten sam efekt można uzyskać
kosztem około
mnożeń/dodawań i jednego pierwiastka stosując
odbicia Householdera. Wydaje się więc, że obroty Givensa opłaca się
stosować jedynie wtedy, gdy wektor
ma niewiele (proporcjonalnie
do
) współrzędnych niezerowych. Nie jest to jednak do końca prawdą.
Istnieje bowiem pewna modyfikacja podanych wzorów autorstwa Gentlemana
pozwalająca istotnie zmniejszyć koszt, którą teraz zaprezentujemy.
Przypuśćmy, że chcemy zastosować serię obrotów Givensa
dla
, gdzie
-ty obrót jest wybrany tak, że
-ta współrzędna wektora
![]() |
jest zerowa. Pomysł modyfikacji polega na przedstawieniu każdego z obrotów w postaci
![]() |
gdzie , a
są pewnymi nieosobliwymi macierzami diagonalnymi
wybranymi tak, by mnożenie przez
było prostsze niż
mnożenie przez
. Wtedy mamy
![]() |
||||
![]() |
![]() |
|||
![]() |
![]() |
Macierze diagonalne ,
a tym samym i przekształcenia
, zdefiniujemy indukcyjnie
dla
. Załóżmy, że zdefiniowaliśmy już
. Niech
będzie obrotem
o kąt
oraz
,
.
Dla uproszczenia zapisu podstawimy ,
oraz
,
. Dalej mamy
,
. Ponieważ
to
![]() |
Przypomnijmy, że obrót jest wybrany tak, że
. Zauważmy, że dla
![]() |
mamy
![]() |
Stąd warunek jest równoważny warunkowi
, czyli
![]() |
Jeśli teraz to przyjmujemy
i
. W przeciwnym przypadku,
uwzględniając równość
, dostajemy
![]() |
Mamy teraz dwa przypadki.
(i) Jeśli to kładziemy
,
i
dla
. Wtedy
dla
oraz
![]() |
gdzie
![]() |
(ii) Jeśli to kładziemy
,
i
dla
. Wtedy
dla
oraz
![]() |
gdzie
![]() |
Macierz ma podobną strukturę jak
.
Obecność dwóch jedynek pozwalaja jednak zaoszczędzić dwa mnożenia
przy operacji
w porównaniu do
.
Ponadto, co jest ważniejsze, obliczanie wielkości
i
(ew.
i
) definiujących
nie wymaga
pierwiastkowania. Rzeczywiście, w kolejnych krokach procesu obliczeniowego
wystarczy pamiętać współczynniki
. Współczynniki te
wyliczane są rekurencyjnie zgodnie ze wzorami
dla
, a dla
![]() |
Zauważmy, jeszcze, że takie rozbicie na przypadki (i) i (ii) pozwala
nie tylko uniknąć dzielenia przez zero, ale również uniknąć
możliwego niedomiaru. Wielkość jeśli zachodzi (i) oraz
jeśli zachodzi (ii) jest w przedziale
.
Możnaby się spytać gdzie jest zysk obliczeniowy. Na końcu procesu
dysponujemy bowiem jedynie macierzą i aby pomnożyć przez
należy najpierw wykonać
pierwiastkowań. Nie jest to jednak zawsze prawdą.
Na przykład, jeśli chcemy przekształcić dany wektor na
kierunek wersora
przy pomocy obrotów Givensa to po wykonaniu serii
przekształceń
![]() |
jedynie pierwsza współrzędna otrzymanego wektora nie jest zerowa.
Mnożenie przez sprowadza się więc do operacji na jego pierwszej
współrzędnej, to zaś wymaga obliczenia tylko jednego pierwiastka kwadratowego.
Podobnie, używając obrotów Givensa można kosztem porównywalnym do
algorytmu bazującego na odbiciach Householdera przekształcić daną
nieosobliwą macierz kwadratową do postaci trójkątnej górnej
(albo, równoważnie, znaleźć jej rozkład ortogonalno-trójkątny).
Rzeczywiście, dokonuje się tego wykonując najpierw na macierzy serię
przekształceń
![]() |
gdzie jest tak dobrana, aby wyzerować współrzędną
aktualnej macierzy, a następnie mnożąc kolejne wiersze otrzymanej
macierzy trójkątnej górnej przez pierwiastki z kolejnych elementów
diagonalnych macierzy
. Całość wymaga więc obliczenia
pierwiastków kwadratowych, podobnie jak w algorytmie Householdera.
(Należy przy tym pamiętać, aby nie wykonywać niepotrzebnie operacji
na elementach zerowych!)
Metoda Jacobiego jest najstarszą z istniejących metod numerycznych znajdowania wartości własnych macierzy symetrycznych. Ma jednak nie tylko znaczenie historyczne. Chociaż jest stosunkowo wolno zbieżna to można ją stosować gdy chcemy obliczyć wartości własne z bardzo dobrą dokładnością w obecności błędów zaokrągleń.
Zakładamy, że jest macierzą symetryczną. Podobnie
jak w metodzie QR, metoda Jacobiego startuje z macierzy
i
produkuje ciąg macierzy podobnych
dla
, który
zbiega do macierzy diagonalnej
![]() |
składającej się z wartości własnych . Różnica polega na tym, że
pojedyncze kroki metody wykonuje się używając obrotów Givensa,
![]() |
![]() |
![]() |
||
![]() |
![]() |
Oznaczając mamy więc
.
Jako miarę odchylenia od macierzy diagonalnej w naturalny
sposób przyjmiemy połowę sumy kwadratów elementów pozadiagonalnych, czyli
![]() |
gdzie . Wielkość
dobrze charakteryzuje
również błąd przybliżenia wartości własnych macierzy
przez elementy
diagonalne macierzy
. Rzeczywiście, niech
![]() |
i . Wtedy
![]() |
gdzie oraz
![]() |
Wyrazy diagonalne macierzy są więc wartościami własnymi macierzy
, którą możemy potraktować jako zaburzoną macierz
. Korzystając
z twierdzenia Weyla 1.3 dostajemy, że istnieje takie uporządkowanie
wartości własnych macierzy
, że
dla wszystkich
mamy
![]() |
Stąd wniosek, że poszczególne obroty powinniśmy wybierać tak,
aby maksymalizować różnicę
. Aby odpowiedzieć na
pytanie który obrót osiąga ten cel, przeanalizujmy pojedynczy krok. Dla
prostoty zapisu oznaczymy
,
,
,
, gdzie
jest obrotem o kąt
,
,
,
.
Zauważmy, że mnożenie z lewej strony przez obrót zmienia jedynie
wiersze
-ty i
-ty macierzy, a mnożenie z prawej strony przez
zmienia kolumny
-tą i
-tą. Dlatego dla
i
wyrazy
i
są sobie równe. Jeśli zaś
i
to
![]() |
a stąd
![]() |
i podobnie .
Otrzymujemy
![]() |
Dla danych wielkości
i
definiujące obrót należy więc
wybrać tak, aby
![]() |
Jeśli to powyższą równość realizuje obrót zerowy.
Załóżmy więc, że
. Bezpośredni rachunek pokazuje,
że wtedy
![]() |
Stąd równość zachodzi wtedy gdy
![]() |
Jeśli podstawimy \tg to ostatnia równość jest
równoważna równaniu kwadratowemu
![]() |
Rozwiązując otrzymujemy następujące wzory:
![]() |
Zauważmy jeszcze, że taka postać rozwiązania pozwala obliczyć
i
z małym błędem względnym w arytmetyce maszyny cyfrowej.
Pozostaje do ustalenia jak wybierać kolejne .
W oryginalnej wersji algorytmu
wybierane są tak, że
![]() |
Ponieważ wtedy , gdzie
to
![]() |
(4.1) |
Mamy więc zapewnioną zbieżność liniową, chociaż iloraz
zbieżności jest bliski jedynce dla dużych wymiarów .
Taki wybór jest jednak zbyt kosztowny, bo wymaga znalezienia
w każdym kroku elementu największego co do modułu wśród
elementów. Dlatego stosowane są inne strategie. Na przykład,
![]() |
i dalej cyklicznie, aż do osiągnięcia żądanej dokładności.
W tym przypadku kłopot polega na tym, że obroty wykonuje się
również wtedy, gdy jest znacznie mniejsze od
, co nie jest opłacalne. Aby temu zapobiec, można
wprowadzić pewien próg
i nie wykonywać obrotów gdy
. Na przykład, możemy wziąć
. Wtedy, po wykonaniu każdego kroku
spełniona jest nierówność (4.1).
Metodę Jacobiego stosuje się do pełnej, rzeczywistej macierzy
symetrycznej. W tym podrozdziale zatrzymamy się na przypadku, gdzie
jest dodatkowo trójdiagonalna,
![]() |
Przypomnijmy, że każdą macierz symetryczną można sprowadzić
do postaci trójdiagonalnej przez podobieństwa ortogonalne.
W rozdziale 2.1.1 pokazaliśmy jak to zrobić przy pomocy
odbić Householdera. Ale równie dobrze możemy użyć obrotów
Givensa. Rzeczywiście, najpierw wybieramy obroty
dla
tak, aby mnożenie
![]() |
spowodowało wyzerowanie kolejno elementów
. (Pamiętamy o algorytmie Gentlemana!)
Ponieważ mnożenie z prawej strony przez
zmienia jedynie
kolumny
-gą oraz
-tą to po operacji
![]() |
wyzerowane elementy w pierwszej kolumnie się nie zmienią. Dalej
postępujemy indukcyjnie dla kolejnych kolumn, od -giej do
-giej, i ostatecznie dostajemy macierz trójdiagonalną
, gdzie
![]() |
przy czym mnożenie z lewej przez zeruje element
.
Oczywiście, wszystkie metody dla macierzy pełnej można stosować również dla macierzy trójdiagonalnej. Jednak ze względu na prostszą strukturę macierzy niektóre metody znacznie się upraszczają. Pokażemy to na przykładzie metody QR z rozdziału 3.2.
W oryginalnej metodzie QR (z przesunięciami lub bez) rozkład
ortogonalno-trójkątny macierzy dokonuje się przy pomocy
odbić Householdera. Dla macierzy trójdiagonalnej
wygodnie jest
użyć do tego celu obrotów Givensa
zerujących
kolejno elementy
dla
. Wtedy
![]() |
jest macierzą trójkątną górną. Teraz istotne jest, że po wykonaniu drugiego kroku metody QR, czyli mnożenia
![]() |
otrzymana macierz pozostaje trójdiagonalna. Rzeczywiście,
skoro
jest trójkątna górna, a mnożenie z lewej strony
przez
kombinuje jedynie wiersze
-ty i
-szy
to
jest macierzą górną Hessenberga, a ponieważ jest
również symetryczna, to jest trójdiagonalna.
Koszt jednego kroku metody QR dla symetrycznej macierzy
trójdiagonalnej jest więc proporcjonalny do
.
Mamy własność ogólniejszą. W procesie iteracyjnym metody QR
macierz trójdiagonalna pozostaje w każdym kroku trójdiagonalna
niezależnie od zastosowanego algorytmu rozkładu na iloczyn
ortogonalno-trójkątny. Wynika to w szczególności stąd, że,
jak pamiętamy, rozkład taki jest wyznaczony jednoznacznie
z dokładnością do macierzy diagonalnej z elementami .
(Jako ćwiczenie, można to pokazać bezpośrednio w przypadku
gdy rozkład dokonywany jest przy użyciu odbić Householdera.)
Oczywiście wszystkie pozostałe fakty na temat metody QR pokazane wcześniej dla macierzy pełnych, w szczególności te dotyczące wyboru przesunięcia i szybkości zbieżności, pozostają w mocy gdy macierz jest trójdiagonalna.
Na końcu serii wykładów na temat zadania własnego zajmiemy się znajdowaniem wartości szczególnych danej macierzy, a to dlatego, że zadanie to i metody jego rozwiązania wiążą się ściśle z zadaniem i metodami znajdowania wartości własnych macierzy symetrycznych.
Najpierw przypomnimy twierdzenie o rozkładzie według wartości
szczególnych, czyli SVD (ang. Singular Value Decomposition).
Będziemy zakładać, bez zmniejszenia ogólności, że liczba kolumn
macierzy nie przekracza liczby jej wierszy, co najczęściej
występuje w praktyce. W przeciwnym przypadku wystarczy zastosować
poniższe twierdzenie dla macierzy transponowanej
.
Dla dowolnej macierzy , gdzie
, istnieją macierze
ortogonalne
i
takie, że
![]() |
gdzie jest macierzą diagonalną,
![]() |
,
a
jest rzędem macierzy
.
Ponieważ macierz jest symetryczna i nieujemnie określona to
istnieje baza ortonormalna
jej wektorów własnych,
a odpowiadające jej wartości własne są nieujemne
(patrz twierdzenia 1.1).
Oznaczmy te wartości własne odpowiednio przez
,
![]() |
przy czym . Zauważmy, że
![]() |
To oznacza, że wektory ,
,
tworzą układ ortonormalny i można go uzupełnić wektorami
do bazy ortonormalnej w
.
Zdefiniujmy teraz macierze ortogonalne
![]() |
![]() |
Wtedy, oznaczając ,
mamy
![]() |
albo, równoważnie, .
Wielkości ,
, to właśnie wartości szczególne
macierzy
. Są one wyznaczone jednoznacznie. Rzeczywiście, jeśli mamy dwa
rozkłady,
, to
![]() |
Porównując wyrazy diagonalne po obu stronach powyższej równości
dostajemy dla wszsytkich
.
Zanotujmy jeszcze, że mając rozkład SVD można np. łatwo rozwiązać liniowe
zadanie najmniejszych kwadratów, tzn. znaleźć wektor minimalizujący
po wszystkich
. (Jeśli istnieje wiele
takich wektorów to bierzemy ten o najmniejszej normie.) Mamy bowiem
![]() |
,
. Stąd
, gdzie
![]() |
Z dowodu twierdzenia 4.1 wynika, że
są wartościami własnymi macierzy symetrycznej i nieujemnie określonej
,
a kolumny macierzy ortogonalnej
tworzą odpowiednio bazę ortonormalną
w
wektorów własnych tej macierzy. Podobnie,
są wartościami własnymi
, a kolumny
tworzą bazę ortonormalną
w
wektorów własnych. Wydaje się więc, że wartości szczególne
(i w razie potrzeby cały rozkład SVD) można łatwo wyznaczyć wykonując
najpierw mnożenie
lub
, a następnie aplikując
do macierzy
jedną z rozpatrzonych wcześniej metod dla zadania własnego.
Należy jednak przestrzec przed takim mechanicznym działaniem.
Niech
Dla ,,małych”
wartości szczególne tej macierzy są bliskie
i
. Jeśli
jest na tyle małe, że
jest w arytmetyce fl reprezentowane przez
to macierz
jest reprezentowana przez macierz
,
która jest już osobliwa - jej druga wartość szczególna jest zerowa.
Z uwagi na możliwą zmianę rzędu macierzy, jak w przytoczonym przykładzie,
stosuje się nieco zmodyfikowane algorytmy znajdowania wartości własnych,
które unikają jawnych mnożeń lub
. Pokażemy to najpierw,
nie wdając się w szczegóły, na przykładzie metody Jacobiego
z rozdziału 4.2.
Przypomnijmy, że metoda Jacobiego zastosowana bezpośrednio do macierzy
konstruuje ciąg macierzy podobnych
, gdzie
, a
jest tak
dobranym obrotem Givensa, aby wyzerować element
i jednocześnie, wobec
symetrii, także
. Oznaczmy
i
dla
. Wtedy
. Pomysł polega na tym, aby zamiast obliczać
jawnie
, w kolejnych krokach
obliczać i pamiętać jedynie
. Jest to możliwe, bowiem
wyznaczenie rotacji
wymaga jedynie znajomości elementów
![]() |
które można obliczyć korzystając z powyższych wzorów.
W tym podrozdziale pokażemy algorytm, który można traktować jako wariant
metody QR zastosowanej do macierzy . Zanim jednak przejdziemy do samego
algorytmu, poczynimy kilka pomocniczych uwag teoretycznych.
Niech będzie macierzą symetryczną i dodanio okteśloną,
.
Rozpatrzmy proces iteracyjny, nazwijmy go LR, który startuje z macierzy
i w kolejnych krokach
(i) wybiera przesunięcie , mniejsze od najmniejszej wartości
własnej
(np.
),
(ii) dokonuje rozkładu Banachiewicza-Cholesky'ego
![]() |
gdzie jest macierzą trójkątną górną
z dodatnimi elementami na głównej przekątnej,
(iii) produkuje .
(Przypomnijmy, że rozkładu Banachiewicza-Cholesky'ego dokonujemy zmodyfikowanym
algorytmem eliminacji Gaussa.) Oczywiście, macierze są do siebie podobne, bo
![]() |
Zachodzi ciekawsza własność.
Dwa kroki iteracji LR z tym samym przesunięciem są równoważne jednemu
krokowi iteracji QR z przesunięciem
.
Bez zmniejszenia ogólności przyjmijmy, że i
. Z jednej
strony, z rozkładu QR mamy
, gdzie
elementy na głównej przekątnej macierzy
są dodatnie, a z drugiej z rozkładu LR
![]() |
![]() |
![]() |
||
![]() |
![]() |
Wobec jednoznaczności rozkładu Banachiewicza-Cholesky'ego mamy więc .
Stąd macierz powstała w wyniku jednego kroku iteracji QR wynosi
![]() |
![]() |
![]() |
||
![]() |
![]() |
|||
![]() |
![]() |
|||
![]() |
![]() |
|||
![]() |
![]() |
|||
![]() |
![]() |
|||
![]() |
![]() |
jak w tezie lematu.
∎Powyższy lemat pokazuje, że rozważania teoretyczne dotyczące iteracji QR można przenieść na iteracje LR. Dlatego dalej nie będziemy się już zajmować analizą teoretyczną LR, a przejdziemy do opisu algorytmu te iteracje wykorzystującego.
Zakładamy, że jest kolumnowo regularna, czyli
,
oraz dwudiagonalna. Dokładniej,
dla
i dla
,
![]() |
Oczywiście, wobec kolumnowej regularności macierzy mamy .
Założenie o dwudiagonalności wydaje się mocno ograniczające. W istocie jednak
tak nie jest, bo każdą macierz można sprowadzić do takiej postaci nie zmieniając
jej wartości szczególnych i kontrolując odpowiednie wektory własne, co
pokażemy na samym końcu.
Algorytm działa podobnie jak iteracje LR z przesunięciami, ale zamiast tworzyć
jawnie macierze , podobne do
, pracuje bezpośrednio na macierzach
.
Przyjmujemy
, gdzie
jest macierzą diagonalną z elementami
na głównej przekątnej
,
. Wtedy
jest macierzą dwudiagonalną z dodatnimi elementami na głównej przekątnej oraz
![]() |
jest macierzą trójdiagonalną. Zobaczmy teraz jak mając macierz dwudiagonalną
możemy skonstruować
. Ponieważ
jest trójdiagonalna to
musi być dwudiagonalna. (W szczególności, wyniknie to również
z dalszych rachunków.) Dla uproszczenia zapisu, oznaczmy elementy przekątniowe
macierzy
i
odpowiednio przez
i
,
,
a elementy nad główną przekątną przez
i
,
.
Przyjmijmy dodatkowo
. Macierze
i
związane są równaniem
![]() |
Porównując wyrazy przekątniowe po obu stronach tej równości otrzymujemy
![]() |
a porównując wyrazy nad przekątną
![]() |
Stąd, podstawiając , mamy następujące wzory
na
i
. Dla
obliczamy
![]() |
i na końcu .
Ponieważ obliczanie pierwiastków jest stosunkowo kosztowne, wzory te
opłaca się zmodyfikować tak, aby nie obliczać pierwiastków w każdej
iteracji, a jedynie na końcu całego procesu iteracyjnego. Można to
osiągnąć pracując na kwadratach i
. Rzeczywiście, wprowadzając
zmienne
i
, otrzymujemy następującą procedurę dla
jednego kroku iteracyjnego:
. | begin | ||
. | . | for ![]() ![]() |
|
. | . | begin | |
. | . | . | ![]() |
. | . | . | ![]() |
. | . | end; | |
. | . | ![]() |
|
. | end; |
A co jeśli nie jest dwudiagonalna? Wtedy trzeba ją wstępnie
przekształcić do postaci dwudiagonalnej nie zmieniając wartości szczególnych.
W tym celu możemy użyć np. odbić Householdera. Najpierw zerujemy wyrazy
w pierwszej kolumnie, oprócz wyrazu diagonalnego, poprzez pomnożenie macierzy
z lewej strony przez odbicie
przekształcające pierwszą
kolumnę
na kierunek
. Oznaczmy
.
Następnie wybieramy odbicie
tak, aby przekształcało
wektor
na kierunek
i mnożymy
z prawej przez
. Ponieważ to mnożenie nie zmienia pierwszej
kolumny
, w powstałej macierzy
elementy w pierwszej kolumnie i w pierwszym wierszu,
poza
i
, są wyzerowane. Dalej postępujemy indukcyjnie zerując
na przemian odpowiednie elementy w kolumnach i wierszach. Ostatecznie, po
krokach otrzymujemy macierz
![]() |
która jest już dwudiagonalna. Jeśli teraz to
, a więc
i
mają te same
wartości szczególne. Ponadto,
![]() |
Zanotujmy jeszcze, że dowolną macierz można sprowadzić w podobny sposób
do postaci dwudiagonalnej przy pomocy obrotów Givensa. Zarówno w przypadku
zastosowania obrotów Givensa jak i odbić Householdera koszt jest
proporcjonalny do .
Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.
strona główna | webmaster | o portalu | pomoc
© Wydział Matematyki, Informatyki i
Mechaniki UW, 2009-2010. Niniejsze materiały są udostępnione bezpłatnie na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Polska.
Projekt współfinansowany przez Unię Europejską w ramach
Europejskiego Funduszu Społecznego.
Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.