Ćwiczenia: układy liniowe z macierzami rzadkimi
Ćwiczenie: Metoda Richardsona
Jedną z najprostszych klasycznych metod iteracyjnych dla równania jest metoda Richardsona zadana
wzorem
gdzie jest pewnym parametrem. Gdy , mamy do czynienia ze zwykłą
metodą iteracji prostej, która najczęściej nie będzie zbieżna, dlatego wybór
parametru jest kluczowy dla skuteczności metody.
Dla symetrycznej dodatnio określonej sprawdź, przy jakich założeniach o
metoda będzie zbieżna do rozwiązania z dowolnego wektora startowego
i oceń szybkość tej zbieżności.
Testuj na macierzy jednowymiarowego laplasjanu różnych wymiarów. Jak najefektywniej zaimplementować mnożenie przez ?
Ćwiczenie
Zaimplementuj operacje:
- mnożenia macierzy przez wektor ,
- wyłuskania wartości elementu ,
- zmiany wartości pewnego zerowego wyrazu macierzy na niezerową,
jeśli macierz jest zadana w formacie
Przetestuj dla kilku macierzy z kolekcji
MatrixMarket.
Rozwiązanie
Dodawanie nowego elementu w formacie AIJ jest bardzo łatwe. W przeciwieństwie do
pozostałych, w których trzeba zachowywać uporządkowanie. Mnożenie przez wektor
najwygodniejsze jest w CSR. Wyłuskanie wartości jest najmniej efektywne w
formacie AIJ.
Zob. Y. Saad, Iterative methods for sparse linear systems
Ćwiczenie
Jak tanio rozwiązywać układ równań z macierzą cykliczną trójdiagonalną, tzn.
Dla uproszczenia załóżmy, że macierz jest dodatnio określona i symetryczna.
Zaimplementuj opracowaną metodę, korzystając z BLASów i LAPACKa.
Rozwiązanie
Gdyby pominąć ostatni wiersz i kolumnę, macierz byłaby trójdiagonalna, a my już wiemy, co z nią zrobić... Jak więc sprytnie pozbyć się ostatniej niewiadomej i
ostatniego równania?
W naszej macierzy wyróżnijmy ostatni wiersz i kolumnę:
gdzie jest podmacierzą główną ,
natomiast , .
Mając rozkład , łatwo stąd wygenerować rozkład , gdyż
gdzie spełnione są zależności
- (rozkład LU macierzy trójdiagonalnej )
- (rozwiązanie układu równań z macierzą dwudiagonalną)
- (jw.)
- .
Ćwiczenie: CGNE
Ktoś mógłby sugerować, że skoro CG działa tylko dla macierzy symetrycznych, to dowolny układ z macierzą nieosobliwą można transformować do równoważnego mu układu równań normalnych
,
którego macierz jest już oczywiście macierzą symetryczną i dodatnio określoną.
Wskaż potencjalne wady tej metody i podaj sposób jej implementacji.
Wskazówka
Jakie jest uwarunkowanie macierzy ?
Rozwiązanie
Nietrudno sprawdzić, że dla normy spektralnej macierzy,
,
a więc w przypadku macierzy źle uwarunkowanych należy spodziewać się patologicznie dużej liczby iteracji. Chociaż dobry prekondycjoner mógłby pomóc:
,
to jednak znacznie lepiej stosować metody opracowane specjalnie dla maicerzy niesymetrycznych, np. GMRES (też z dobrym prekondycjonerem...).
Implementacja metody to tylko decyzja, jak realizować mnożenie przez . Oczywiście niedobra metoda to
B = A^TA;
...
while ...
y = B*x;
end
,
gdyż będzie bardziej wypełniona niż A. Znacznie lepiej
...
while ...
y = A*x;
y = (y'*A)';
end
jest to koszt równy dwukrotnemu mnożeniu przez macierz (w formacie AIJ).