MN 08 Uklady Row Lin 3, metody numeryczne


MN08

Wielkie układy równań liniowych

Wraz z coraz większymi modelami pojawiającymi się w praktyce obliczeniowej, coraz częściej zachodzi potrzeba rozwiązywania zadań algebry liniowej, w której macierze są co prawda wielkiego wymiaru, ale najczęściej rozrzedzone, to znaczy jest w nich bardzo dużo zer. Bardzo często zdarza się, że macierz wymiaru 0x01 graphic
ma tylko 0x01 graphic
niezerowych elementów. Wykorzystanie tej specyficznej własności macierzy nie tylko prowadzi do algorytmów istotnie szybszych od ich analogów dla macierzy gęstych (to znaczy takich, które (w założeniu) mają 0x01 graphic
elementów), ale wręcz są jedynym sposobem na to, by niektóre zadania w ogóle stały się rozwiązywalne przy obecnym stanie techniki obliczeniowej.

Jednym ze szczególnie ważnych źródeł układów równań z macierzami rozrzedzonymi są np. równania różniczkowe cząstkowe. Modele wielostanowych systemów kolejkowych (np. routera obsługującego wiele komputerów) także prowadzą do gigantycznych układów równań z macierzami rozrzedzonymi o specyficznej strukturze.

Przykład: Macierz z kolekcji Boeinga

Struktura niezerowych elementów macierzy bcsstk38.

Spójrzmy na macierz sztywności dla modelu silnika lotniczego, wygenerowaną swego czasu w zakładach Boeinga i pochodzącą z dyskretyzacji pewnego równania różniczkowego cząstkowego. Pochodzi z kolekcji Tima Davisa. Jest to mała macierz, wymiaru 8032 (w kolekcji spotkasz równania z milionem i więcej niewiadomych). Jej współczynnik wypełnienia (to znaczy, stosunek liczby niezerowych do wszystkich elementów macierzy) wynosi jedynie 0x01 graphic
, a więc macierz jest bardzo rozrzedzona: w każdym wierszu są średnio tylko 44 niezerowe elementy.

Reprezentacja macierzy rzadkich

Zacznijmy od sposobu przechowywania macierzy rozrzedzonych. Naturalnie, nie ma sensu przechowywać wszystkich zerowych jej elementów: wystarczy ograniczyć się do zachowania tych niezerowych. W ten sposób zmniejszamy zarówno wymagania pamięciowe, jak i liczbę operacji zmiennoprzecinkowych potrzebnych do prowadzenia działań na macierzy (np. w przypadku mnożenia macierzy przez wektor, nie będziemy mnożyć przez zera).

Format współrzędnych

Do zapamiętania macierzy 0x01 graphic
wymiaru 0x01 graphic
o 0x01 graphic
niezerowych elementów wykorzystujemy trzy wektory: I, J --- oba typu int --- oraz V, typu double, wszystkie o długości 0x01 graphic
, przy czym

0x01 graphic

Format AIJ. W tym formacie wprowadzane są macierze rzadkie do Octave'a i MATLABa:

A = sparse(I,J,V,N,N);

Jednak wewnętrznie przechowywane są w innym formacie.

Przykład. Pokażemy jak w Octave wprowadzić macierz rozrzedzoną.

<realnowiki><realnowiki><realnowiki><realnowiki>octave:10> I = [1, 1, 1, 2, 3, 1, 4];

octave:11> J = [1, 3, 2, 2, 3, 4, 4];

octave:12> V = [1, 2, 3, 4, 5, 6, 7];

octave:13> N = 4;

octave:14> A = sparse(I,J,V,N,N)

A =

Compressed Column Sparse (rows = 4, cols = 4, nnz = 7)

(1, 1) -> 1

(1, 2) -> 3

(2, 2) -> 4

(1, 3) -> 2

(3, 3) -> 5

(1, 4) -> 6

(4, 4) -> 7

octave:15> spy(A);

</realnowiki></realnowiki></realnowiki></realnowiki>

Strukturę jej niezerowych elementów ukaże nam polecenie spy(A). Tak właśnie zostały wygenerowane obrazki macierzy w niniejszym wykładzie.

Format spakowanych kolumn (wierszy)

Format współrzędnych nie narzucał żadnego uporządkowania elementów macierzy oraz można było je umieszczać w dowolnej kolejności. Narzucenie sensownego porządku mogłoby wspomóc realizację wybranych istotnych operacji na macierzy, na przykład, aby wygodnie było realizować działanie (prawostronnego) mnożenia macierzy przez wektor, dobrze byłoby przechowywać elementy macierzy wierszami. Tak właśnie jest zorganizowany format spakowanych wierszy (Compressed Sparse Row, CSR). Analogicznie jest zdefiniowany format spakowanych kolumn (Compressed Sparse Column, CSC), którym zajmiemy się bliżej.

Podobnie jak w przypadku formatu współrzędnych, macierz w formacie CSC jest przechowywana w postaci trzech wektorów: AV jest wektorem typu double o długości 0x01 graphic
, zawierającym kolejne niezerowe elementy macierzy 0x01 graphic
wpisywane kolumnami, AI jest wektorem typu int o długości 0x01 graphic
, zawierającym numery wierszy macierzy 0x01 graphic
odpowiadających elementom z AV. Natomiast zamiast tablicy J, jak to było w formacie współrzędnych, mamy krótszy wektor typu int, AP, o długości 0x01 graphic
, zawierający na 0x01 graphic
-tym miejscu indeks pozycji w AV, od którego rozpoczynają się w AV elementy 0x01 graphic
-tej kolumny macierzy 0x01 graphic
.

Format CSC

Mamy więc zależność, przy założeniu, że 0x01 graphic
,

0x01 graphic

Taki (z drobnymi modyfikacjami) format macierzy wykorzystują np. pakiety ARPACK i UMFPACK (a także, wewnętrznie, Octave i MATLAB).

Format diagonalny

Znacznie mniej uniwersalny niż poprzednie i dlatego rzadziej spotykany. Kolejne diagonale macierzy przechowujemy w kolejnych wierszach macierzy 0x01 graphic
, gdzie 0x01 graphic
jest liczbą niezerowych diagonal w 0x01 graphic
. Szczególnie wygodny do reprezentacji macierzy taśmowych. Wykorzystywany m.in. przez funkcję LAPACKa DGBSV służącą rozwiązywaniu równań z macierzami taśmowymi.

Uwagi praktyczne

Mnożenie macierzy w formacie AIJ przez wektor jest kilka razy wolniejsze w porównaniu do macierzy w formacie CSC/CSR (z tych dwóch oczywiście CSR jest najszybszy). Co więcej, okazuje się, że w typowych implementacjach, mnożenie macierzy rozrzedzonej (reprezentowanej np. w formacie CSC) przez wektor jest mało efektywne, mniej więcej na poziomie dziesięciu procent możliwości obliczeniowych procesora.

Jeśli już poważnie myśleć o przyspieszeniu mnożenia macierzy przez wektor (np. gdy chcemy stosować iteracyjną metodę rozwiązywania układu równań z tą macierzą), warto rozważyć inne formaty --- łączące w sobie podział macierzy na bloki (tak, jak w algorytmach BLAS) i przechowywanie (w zasadzie) tylko niezerowych elementów macierzy.

Macierze specjalne

Zajmiemy się teraz zadaniem rozwiązywania układu równań liniowych

0x01 graphic

ale w sytuacji, gdy macierz 0x01 graphic
jest rozrzedzona i dużego wymiaru. Dokonamy przeglądu kilku rodzajów algorytmów mających na celu wykorzystanie rozrzedzenia macierzy dla obniżenia kosztu wyznaczenia rozwiązania układu.

Należy pamiętać, że z reguły najlepsze wyniki uzyskuje się, gdy konkretny algorytm dobierze się do konkretnej macierzy. W zastosowaniach pojawiają się m.in. macierze rzadkie o bardzo szczególnej strukturze, dla nich warto stosować wyspecjalizowane algorytmy.

Macierze taśmowe

Macierz 0x01 graphic
taka, że dla 0x01 graphic
, 0x01 graphic
, nazywamy macierzą taśmową z rozstępem 0x01 graphic
, o szerokości pasma 0x01 graphic
.

Łatwo sprawdzić, że algorytm eliminacji Gaussa (bez wyboru elementu głównego) nie spowoduje dodatkowego wypełnienia w takiej macierzy (a więc da się wykonać w miejscu). W przypadku konieczności wyboru elementu głównego, pesymistyczne oszacowanie rozstępu macierzy rozkładu LU jest równe 0x01 graphic
--- tak więc, dla niezbyt dużych 0x01 graphic
wciąż wynikowa macierz jest taśmowa.

W szczególności, gdy macierz jest taśmowa z pasmem o rozstępie 0x01 graphic
i jednocześnie diagonalnie dominująca, wtedy rozkład LU takiej macierzy da się wykonać w miejscu kosztem 0x01 graphic
, czyli liniowym względem 0x01 graphic
.

W LAPACKu zaimplementowano szybki solver równań z macierzami taśmowymi, DGBSV, ale wymagający specjalnego sposobu przechowywania macierzy, wykorzystującego format diagonalny.

Macierze trójdiagonalne

Szczególnym przypadkiem macierzy taśmowych są macierze trójdiagonalne, tzn. taśmowe o rozstępie 0x01 graphic
:

0x01 graphic

Zadanie rozwiązywania równań z taką macierzą,

0x01 graphic

jest bardzo często spotykane, więc warto przytoczyć algorytm w całej okazałości --- popularnie zwany algorytmem przeganiania (niektóre źródła nazywają go algorytmem Thomasa).

Twierdzenie. Jeśli macierz 0x01 graphic
ma słabo dominującą diagonalę, tzn.

0x01 graphic

(0x01 graphic
) i przynajmniej dla jednego indeksu "0x01 graphic
" mamy powyżej ostrą nierówność "0x01 graphic
", to algorytm przeganiania jest wykonalny bez przestawień wierszy. Ponadto wymaga on 0x01 graphic
operacji arytmetycznych, a więc jest prawie optymalny.

Algorytm Metoda przeganiania (w miejscu)

0x01 graphic

for (i = 2; i <= N; i++)

{

0x01 graphic
= 0x01 graphic
/0x01 graphic
;

0x01 graphic
= 0x01 graphic
- 0x01 graphic
* 0x01 graphic
;

0x01 graphic
= 0x01 graphic
- 0x01 graphic
* 0x01 graphic
;

}

0x01 graphic
= 0x01 graphic
/0x01 graphic
;

for (i = N-1; i >= 1; i--)

0x01 graphic
= (0x01 graphic
- 0x01 graphic
* 0x01 graphic
)/0x01 graphic
;

Metody bezpośrednie

Przykład: Strzałka Wilkinsona. Rozważmy układ równań z macierzą diagonalnie dominującą postaci

0x01 graphic

gdzie 0x01 graphic
oznacza jakiś niezerowy element. Łatwo sprawdzić, że chociaż wyjściowa macierz jest rozrzedzona, to zastosowanie do niej eliminacji Gaussa powoduje, że w wyniku dostajemy gęste czynniki rozkładu.

Tymczasem wystarczy odwrócić kolejność równań i numerację niewiadomych (co dla macierzy jest równoznaczne z odwróceniem porządku wierszy i kolumn, korzystając z pewnej macierzy permutacji 0x01 graphic
):

0x01 graphic

Wtedy okazuje się, że rozkład naszej macierzy nie powoduje już wypełnienia czynników rozkładu.

Właśnie na tym polega główny problem w rozwiązywaniu układów z macierzami rzadkimi metodami bezpośrednimi: jak maksymalnie wykorzystać rozrzedzenie macierzy tak, by czynniki rozkładu były możliwie mało wypełnione. Albowiem wiedząc to będziemy mogli ograniczyć się jedynie do fizycznego wyznaczenia wartości niezerowych elementów macierzy rozkładu. Ponadto wymagania pamięciowe algorytmu nie będą istotnie wykraczać ponad ilość pamięci potrzebnej na przechowanie danych (tzn. macierzy).

W ogólnym przypadku rozwiązanie takiego zadania jest trudne i większość algorytmów opiera się na pewnych heurystykach, które jednak w praktyce warto wspomóc wcześniejszą analizą konkretnego układu równań jaki mamy rozwiązać. Najczęściej dąży się do takiego przenumerowania równań i niewiadomych, by w efekcie z góry przewidzieć, gdzie wystąpią zera w macierzach rozkładu, i, by takich zer było jak najwięcej (by wypełnienie było jak najmniejsze). Na architekturach z pamięcią hierarchiczną dąży się także do tego, by w trakcie rozkładu można było korzystać z BLAS Level 3, a więc permutacje wierszy i kolumn macierzy muszą to także brać pod uwagę.

Stosuje się kilka strategii wyznaczania korzystnych permutacji (reorderingu), z których warto wymienić

Używają ich biblioteki takie jak UMFPACK, czy HSL.

W Octave mamy do dyspozycji także kilka procedur generujących takie permutacje, w tym: colamd (AMD dla macierzy niesymetrycznych) oraz symamd (AMD dla macierzy symetrycznych). Większy wybór oferuje MATLAB, jednak należy bezwzględnie pamiętać o jednym: nie ma uniwersalnej metody reorderingu i dla konkretnej macierzy może istnieć specjalna metoda, która da oszałamiające rezultaty, podczas gdy standardowe podejścia nie dadzą efektu.

Przykład: Rozwiązywanie układu z macierzą rozrzedzoną w Octave. Najprostszy sposób na wykorzystanie metody bezpośredniego rozwiązywania układu z macierzą rzadką to zastosowanie znanego nam operatora do macierzy typu rozrzedzonego:

A = sparse(...);

x = A \ b;

Octave domyślnie przyłoży do 0x01 graphic
reordering colamd i następnie skorzysta z biblioteki UMFPACK, by rozwiązać taki układ. Dodatkowo, badane jest wcześniej, czy macierz nie jest przypadkiem taśmowa o wąskiej wstędze: jeśli jest, to korzysta się z LAPACKa.

Przykład: Wypełnienie pewnej macierzy w zależności od użytego reorderingu. Rozważmy ponownie macierz pochodzącą z kolekcji Tima Davisa. Jest to macierz symetryczna, dodatnio określona, wymiaru 8032, o 355460 elementach niezerowych i, w konsekwencji, o wypełnieniu około 0.6 procent.

Struktura niezerowych elementów macierzy.

Zobaczymy, jak w zależności od użytego algorytmu permutacji kolumn i wierszy poradzi sobie algorytm rozkładu Cholesky'ego.

Czynnik rozkładu Cholesky'ego 0x01 graphic
wykonanego standardowym algorytmem. Czas rozkładu: 0.892013

Czynnik rozkładu Cholesky'ego 0x01 graphic
z reorderingiem COLAMD. Czas rozkładu: 0.813038

Czynnik rozkładu Cholesky'ego 0x01 graphic
z reorderingiem SYMAMD. Czas rozkładu: 0.487683s.

Prawie dwa razy szybciej niż bez reorderingu, chociaż i tak wskutek wzrostu wypełnienia macierzy w dolnym trójkącie mamy aż 2 procent niezerowych elementów.

Czynnik rozkładu Cholesky'ego 0x01 graphic
z odwrotnym reorderingiem Cuthill-McKee. Czas rozkładu: 0.845928

Czynnik rozkładu Cholesky'ego 0x01 graphic
z jeszcze innym (bardzo tanim, ale jak widać czasem zupełnie złym) reorderingiem. Czas rozkładu: 5.947936

Na zakończenie popatrzmy, jak ważne jest spostrzeżenie symetrii macierzy:

Rozkład LU, czynnik 0x01 graphic
(bez reorderingu). Czas rozkładu LU: 1.696018s. Nieakceptowany, podobnie jak drastyczne wypełnienie macierzy.

Rozkład LU, czynnik 0x01 graphic
(bez reorderingu)

Jak widać, w naszym przypadku standardowe algorytmy (COLAMD i SYMAMD) poradziły sobie całkiem nieźle, chociaż wypełnienie i tak znacząco wzrosło. Zapewne, dla tej macierzy, która jest specyficznego typu --- pochodzi z dyskretyzacji równania różniczkowego --- algorytm ND mógłby tu jeszcze lepiej zadziałać.

Stacjonarne metody iteracyjne

Gdy macierz jest rozrzedzona, mnożenie takiej macierzy przez wektor jest bardzo tanie (koszt jest proporcjonalny do liczby niezerowych elementów macierzy). Dlatego, jeśli możemy zadowolić się rozwiązaniem przybliżonym układu, a w zamian osiągnąć je tanim kosztem, warto rozważyć metody iteracyjne.

Najprostsze metody iteracyjne (najprostsze w analizie i implementacji, ale w praktyce najmniej efektywne) polegają na rozkładzie macierzy na część "łatwo odwracalną", 0x01 graphic
, i "resztę", 0x01 graphic
. Dokładniej, jeśli 0x01 graphic
jest nieosobliwa, to równanie 0x01 graphic
można zapisać jako zadanie punktu stałego

0x01 graphic

gdzie 0x01 graphic
. Inaczej:

0x01 graphic

i zastosować doń metodę iteracji prostej Banacha:

0x01 graphic

Takie metody nazywamy stacjonarnymi metodami iteracyjnymi. Aby przeanalizować zbieżność takiej metody, warto rozpatrzyć przypadek ogólniejszy

0x01 graphic

dla pewnej macierzy 0x01 graphic
oraz wektora 0x01 graphic
. (Dla stacjonarnej metody iteracyjnej, 0x01 graphic
oraz 0x01 graphic
). W tym przypadku

0x01 graphic

a stąd i z nierówności 0x01 graphic
, mamy

0x01 graphic

Warunkiem dostatecznym zbieżności iteracji prostych jest więc 0x01 graphic
. Okazuje się, że warunkiem koniecznym i dostatecznym zbieżności tej iteracji dla dowolnego wektora startowego 0x01 graphic
jest

0x01 graphic

Tak więc, metody oparte na iteracji prostej będą zbieżne liniowo z ilorazem 0x01 graphic
.

Zaletą stacjonarnych metod iteracyjnych jest również ich prostota, przez co są one łatwe do zaprogramowania, co łatwo zobaczyć na przykładach metod: Jacobiego i Gaussa--Seidela, które teraz omówimy.

Metoda Jacobiego

Biorąc 0x01 graphic
, gdzie 0x01 graphic
jest macierzą diagonalną składającą się z wyrazów stojących na głównej przekątnej macierzy 0x01 graphic
, układ 0x01 graphic
jest równoważny układowi

0x01 graphic

a stąd (o ile na przekątnej macierzy 0x01 graphic
nie mamy zera) otrzymujemy metodę iteracyjną

0x01 graphic

gdzie 0x01 graphic
i 0x01 graphic
, zwaną metodą Jacobiego.

Rozpisując ją po współrzędnych dostajemy (numer iteracji wyjątkowo zaznaczamy w postaci górnego indeksu) układ rozszczepionych równań:

0x01 graphic

co znaczy dokładnie tyle, że w 0x01 graphic
-tym równaniu wyjściowego układu przyjmujemy za współrzędne 0x01 graphic
wartości z poprzedniej iteracji i na tej podstawie wyznaczamy wartość 0x01 graphic
.

Twierdzenie O zbieżności metody Jacobiego. W metodzie Jacobiego warunek dostateczny zbieżności, 0x01 graphic
, jest spełniony np. wtedy, gdy macierz 0x01 graphic
ma dominującą przekątną, tzn. gdy

0x01 graphic

Dowód. Rzeczywiście, ponieważ wyraz 0x01 graphic
macierzy 0x01 graphic
wynosi 0x01 graphic
dla 0x01 graphic
oraz 0x01 graphic
dla 0x01 graphic
, a więc

0x01 graphic

przy czym ostatnia nierówność wynika z warunku diagonalnej dominacji.

Przykład: Macierz laplasjanu. Macierz 0x01 graphic
, zwana macierzą jednowymiarowego laplasjanu

0x01 graphic

pojawia się w bardzo wielu zastosowaniach, także jako podzadanie w algorytmach numerycznych. Ta macierz jest macierzą taśmową, symetryczną i dodatnio określoną, więc układ równań z tą macierzą można bez trudu rozwiązać metodami bezpośrednimi, kosztem 0x01 graphic
. Stosując do niej metodę Jacobiego mamy 0x01 graphic
oraz 0x01 graphic
. Obliczając normę macierzy iteracji Jacobiego dostajemy 0x01 graphic
, co nie rozstrzyga jeszcze o jej zbieżności lub niezbieżności. Potrzebna będzie bardziej subtelna analiza. Okazuje się, że są znane wzory na wartości własne macierzy 0x01 graphic
:

0x01 graphic

dla 0x01 graphic
W konsekwencji, wartościami własnymi 0x01 graphic
są liczby 0x01 graphic
. Ponieważ 0x01 graphic
, znaczy to, że metoda Jacobiego jest zbieżna dla macierzy 0x01 graphic
.

Z drugiej strony, nie dajmy się zwieść optymizmowi matematyka ("nie martw się, jest zbieżny..."): nietrudno sprawdzić, że 0x01 graphic
, co oznacza, że metoda Jacobiego --- choć zbieżna --- dla dużych 0x01 graphic
staje się zbieżna tak wolno, że w praktyce bezużyteczna.

Metoda Gaussa-Seidela

Heurystyka tej metody opiera się na zmodyfikowaniu metody Jacobiego tak, by w każdym momencie iteracji korzystać z najbardziej "aktualnych" współrzędnych przybliżenia rozwiązania 0x01 graphic
.

Rzeczywiście, przecież rozwiązując równanie metody Jacobiego:

0x01 graphic

nietrudno zauważyć, że w części sumy moglibyśmy odwoływać się do "dokładniejszych" wartości 0x01 graphic
: dla 0x01 graphic
, tzn.

0x01 graphic

W języku rozkładu macierzy 0x01 graphic
i iteracji 0x01 graphic
mamy więc 0x01 graphic
(dolny trójkąt macierzy 0x01 graphic
).

Twierdzenie O zbieżności metody Gaussa-Seidela. Jeśli macierz 0x01 graphic
jest diagonalnie dominująca, to metoda Gaussa--Seidela jest zbieżna dla dowolnego wektora startowego 0x01 graphic
.

Inny wariant tej metody dostalibyśmy, biorąc za 0x01 graphic
górny trójkąt macierzy 0x01 graphic
.

Metoda Gaussa--Seidela jest w wielu przypadkach rzeczywiście szybciej zbieżna od metody Jacobiego, np. tak jest w przypadku macierzy jednowymiarowego Laplasjanu. Wciąż jednak, dodajmy, dla zadań bardzo źle uwarunkowanych jej zbieżność jest zbyt wolna by ją stosować jako samodzielną metodę.

Obie metody, Jacobiego i (zwłaszcza) Gaussa--Seidela stosuje się także czasem w prostych algorytmach rozwiązywania układów równań nieliniowych: ich zaletą jest to, że głównym składnikiem iteracji jest rozwiązywanie skalarnego równania nieliniowego na każdym kroku metody.

Złożoność stacjonarnych metod iteracyjnych

Zastanówmy się teraz nad złożonością metod iteracyjnych. Ponieważ możemy jedynie znaleźć pewne przybliżenie rozwiązania dokładnego 0x01 graphic
, przez złożoność metody będziemy rozumieli koszt kombinatoryczny obliczenia 0x01 graphic
z zadaną dokładnością 0x01 graphic
. Dla uproszczenia założymy, że metoda jest zbieżna liniowo z ilorazem 0x01 graphic
. Zauważmy, że aby zredukować błąd początkowy do 0x01 graphic
, wystarczy wykonać 0x01 graphic
iteracji, gdzie 0x01 graphic
spełnia

0x01 graphic

czyli

0x01 graphic

Liczba ta zależy więc w istotny sposób od błędu początkowego i (przede wszystkim) od współczynnika redukcji błędu 0x01 graphic
, natomiast zależność od dokładności 0x01 graphic
i wymiaru 0x01 graphic
układu jest dużo mniej istotna (w zadaniach praktycznych -- takich jak jednowymiarowy laplasjan --- jednak często okazuje się, że... 0x01 graphic
zależy od 0x01 graphic
).

Zakładając, że koszt jednej iteracji wynosi 0x01 graphic
(0x01 graphic
jest tym mniejszy, im mniejsza jest liczba niezerowych elementów macierzy 0x01 graphic
), złożoność metody jest proporcjonalna do

0x01 graphic

Stąd oczywisty wniosek (prawdziwy nie tylko dla metod stacjonarnych), że metody iteracyjne warto stosować zamiast metod bezpośrednich w przypadku, gdy

Układy o tych własnościach powstają często przy numerycznym rozwiązywaniu równań różniczkowych cząstkowych.

Metody przestrzeni Kryłowa

Zupełnie inny pomysł na realizację metody iteracyjnej przedstawiają metody przestrzeni Kryłowa, gdzie kolejne przybliżenie 0x01 graphic
dobiera się w taki sposób, by minimalizowało pewną miarę błędu na podprzestrzeni Kryłowa

0x01 graphic

gdzie 0x01 graphic
jest residuum na początku iteracji. Przestrzeń Kryłowa jest rozpięta przez kolejne wektory metody potęgowej. W zależności od wyboru sposobu miary błędu, dostajemy inną metodę iteracyjną, takie jak CG, GMRES, PCR, BiCG, i inne. Tutaj omówimy pokrótce tylko najpopularniejszą: CG.

CG. Metoda gradientów sprzężonych, w skrócie CG (conjugate gradients), działa przy założeniu, że 0x01 graphic
jest symetryczna i dodatnio określona.

Kolejne przybliżenie 0x01 graphic
ma minimalizować błąd w normie energetycznej indukowanej przez 0x01 graphic
,

0x01 graphic

na przestrzeni afinicznej 0x01 graphic
. Okazuje się (co nie jest oczywiste --- trzeba skorzystać z rozmaitych własności ortogonalności generowanych wektorów), że takie zadanie minimalizacji daje się bardzo efektywnie rozwiązać, skąd dostajemy bardzo zwarty algorytm:

Algorytm Metoda CG

0x01 graphic

r = b-A*x;

0x01 graphic
= 0x01 graphic
; 0x01 graphic
= 0; k = 1;

while (!stop)

{

p = r + 0x01 graphic
*p;

w = A*p;

0x01 graphic
= 0x01 graphic
/0x01 graphic
;

x = x + 0x01 graphic
*p;

r = r - 0x01 graphic
*w;

0x01 graphic
= 0x01 graphic
;

0x01 graphic
= 0x01 graphic
;

k++;

}

Jak widać, całą iterację da się wykonać przechowując w pamięci tylko kilka wektorów (a nie, jak można by się obawiać, całą przestrzeń 0x01 graphic
), a najdroższym jej elementem jest mnożenie macierzy przez wektor.

Twierdzenie O zbieżności CG jako metody bezpośredniej. Niech 0x01 graphic
będzie symetryczna i dodatnio określona. Algorytm CG znajdzie dokładne rozwiązanie po co najwyżej 0x01 graphic
iteracjach.

Powyższe twierdzenie, choć teoretycznie interesujące, ma małą wartość praktyczną z dwóch powodów:

Dlatego wygodniej potraktować CG jako metodę iteracyjną. Zachodzi bowiem

Twierdzenie Zbieżność CG jako metody iteracyjnej. Po 0x01 graphic
iteracjach metody CG,

0x01 graphic

gdzie 0x01 graphic
.

GMRES

Metoda GMRES (Generalized Minimum RESidual) nie wymaga ani symetrii, ani dodatniej określoności macierzy, jest więc bardziej uniwersalna, choć też bardziej kosztowna od CG. Jej szczegółowe omówienie, w tym --- oszacowania szybkości zbieżności --- wykracza niestety poza ramy niniejszego wykładu.

Ściskanie macierzy

Zbieżność wszystkich poznanych metod iteracyjnych zależy od własności spektralnych macierzy układu. Pojawiające się w zastosowaniach macierze często mają niekorzystne własności spektralne (np. bardzo duży wskaźnik uwarunkowania), przez co metody iteracyjne zbiegają na nich bardzo wolno. Dlatego bardzo korzystne może być wstępne przetransformowanie układu

0x01 graphic

z macierzą o niekorzystnych własnościach, do układu

0x01 graphic

gdzie macierz 0x01 graphic
ma znacznie korzystniejsze własności z punktu widzenia używanej metody iteracyjnej.

W przypadku macierzy symetrycznych widzieliśmy, że kluczowe znaczenie dla zbieżności metody miał rozkład wartości własnych: jeśli wartości własne były bardzo rozrzucone po prostej, to uwarunkowanie było bardzo duże i w konsekwencji zbieżność powolna.

Aby zbieżność była szybsza, kluczowe jest, by:

Jeśli więc chcielibyśmy przekształcić macierz tak, by metoda iteracyjna dla 0x01 graphic
zbiegała szybko, musimy w jakiś sposób "ścisnąć" spektrum macierzy 0x01 graphic
w okolice jedności. Taką operację nazywamy ściskaniem (preconditioning), a macierz 0x01 graphic
--- macierzą ściskającą. Aby całość miała sens, macierz ściskająca 0x01 graphic
powinna:

Kilka ekstremalnych (lecz wątpliwej jakości) "propozycji" na macierz ściskającą to 0x01 graphic
(łatwa w konstrukcji i tania w mnożeniu, ale niestety nic nie polepsza...) oraz 0x01 graphic
(rewelacyjnie poprawia zbieżność metody iteracyjnej, dając zbieżność w jednej iteracji, ale bardzo droga w konstrukcji i mnożeniu). Widać więc, że należy poszukiwać czegoś pośredniego, co niskim kosztem przybliża działanie macierzy odwrotnej.

Dlatego jednym z powszechniej stosowanych (aczkolwiek wciąż nie najbardziej skutecznych) sposobów ściskania są te oparte na zastosowaniu jednego kroku klasycznej metody iteracyjnej.

Zbieżność metody CG bez żadnego ściskania oraz ściśniętej imadłem opartym na jednej iteracji (blokowej) metody Jacobiego.

Inne sposoby ściśnięcia macierzy wykorzystują np. techniki tzw. niepełnego rozkładu macierzy, albo --- w specyficznych przypadkach --- tzw. metody wielosiatkowe.

Okazuje się, że zarówno CG jak i GMRES da się zaimplementować tak, by w jednej iteracji było konieczne tylko jedno mnożenie przez macierz ściskającą.

Literatura



Wyszukiwarka

Podobne podstrony:
MN 07 Uklady Row Lin 2, metody numeryczne
MN 05 Uklady Row Lin 1, metody numeryczne
MN 02 Row Nielin, metody numeryczne
R4 Niel Row Alg(1), metody numeryczne
R8 Row Roz, metody numeryczne
Cichy B Metody numeryczne, mn 08
MN energetyka zadania od wykładowcy 09-05-14, STARE, Metody Numeryczne, Część wykładowa Sem IV
Metody numeryczne PDF, MN macierze 01 1
Metody numeryczne PDF, MN raphson 11
Cichy B Metody numeryczne, mn 06
Metody numeryczne PDF, MN mnk1 06
Metody numeryczne PDF, MN inter 05
SCIAGA METODY NUMERYCZNE testy 1-8, Mechatronika, Semestr IV, Metody numeryczne, opracowanie MN, TES
Metody numeryczne PDF, MN mnk2 07
MN 1EF-DI-wytyczne proj, Studia Informatyka 2010, Semestr2, Metody Numeryczne

więcej podobnych podstron