Rozwiązywanie algebraicznych układów równań liniowych metodami iteracyjnymi Plan wykładu: 1. Przykłady macierzy rzadkich i formaty ich zapisu 2. Metody: Jacobiego, Gaussa-Seidla, nadrelaksacji 3. Zbieżność metod iteracyjnych 4. Metody: największego spadku, sprzężonego gradientu. Literatura: Yousef Saad Iterative methods for sparse linear systems
Matrix Market - DWT: Everstine's collection from the Harwell-Boeing Collection DWT 87: WIeża DWT 234: Wieża z platformą DWT 607: Wirnik Wankela Łopata turbiny 2802 x 2802, 6342 NZ Cylinder z kołnierzem 2919 x 2919, 7593 NZ 2
Wybrane formaty zapisu macierzy rzadkich - CSR (compressed sparse row) trzy wektory: wartości, numery kolumn, początki wierszy (pierwsze nie-zero w wierszu) - CSC (compressed sparse column) trzy wektory: wartości, numery wierszy, początki kolumn (pierwsze nie-zero w kolumnie) - CF (coordinate format) trzy wektory dla: wartości, oraz numery kolumn i wierszy dla nie-zer CSR dla macierzy symetrycznej zapamiętujemy tylko macierz U wartości = (1-1 -3 5 4 6 4 7-5) kolumna = (1 2 4 2 3 4 5 4 5) wiersz = (1 4 5 8 9 10) CSR dla macierzy niesymetrycznej wartości = (1-1 -3-2 5 4 6 4-4 2 7 8-5) kolumna = (1 2 4 1 2 3 4 5 1 3 4 2 5) wiersz = (1 4 6 9 12 14) 3
Mnożenie Ax=y w formacie CSR dla macierzy niesymetrycznej a ij x j = y i j=1 a[ ] - elementy macierzowe, k[] - numery kolumn, w[]-indeksy z poczatkami wierszy y=0; for(i=1; i<n; i++){ l 1 =w[i]; // początek indeksow dla i-tego wiersza l 2 =w[i+1]-1; // koniec indeksów dla i-tego wiersza for(l=l 1 ; l<=l 2 ; l++){ j=k[l]; //numer kolumny y[i]=y[i]+a[l]*x[j]; } } 4
Mnożenie Ax=y w formacie CSR dla macierzy symetrycznej A=U+D+L oraz L=U T (U+D+L)x = y =(D+U)x + (x T U) T Czyli a ij x j = y i! j=1 Jeśli zamienimy wskaźniki w drugiej sumie to element a ij *x i będzie dawać wkład do y j, które zostanie wyznaczone później (j>i) w ten sposób dochodząc do wiersza j-tego wartość drugiej sumy będzie znana. a[ ] - wektor elementów macierzowych, k[] - numery kolumn, w[]-indeksy z początkami wierszy y=0; for(i=1; i<=n; i++){ a ij x j + X x j a ji j<i j=i l 1 =w[i]; // początek indeksow dla i-tego wiersza l 2 =w[i+1]-1; // koniec indeksów dla i-tego wiersza for(l=l 1 ; l<=l 2 ; l++){ j=k[l]; //numer kolumny } } y[i]=y[i]+a[l]*x[j]; if( i!=j ) y[j]=y[j]+a[l]*x[i]; // sumowanie tyko po elementach pozadiagonalnych // modyfikacja pochodzi od drugiej sumy 5
Szukamy rozwiązania układu n równań liniowych Ax = b; A 2 R n n ; x; b 2 R n Oznaczmy A jako sumę 3 macierzy A = L + D + U Dlaczego używamy metod iteracyjnych? Przykład N=50000 liczba równań w układzie fl 2 = 8 bajtów/liczbę podwójna precyzja L D U a) Ograniczenia pamięci P d <N 2 fl 2 = 20 GB (10GB) zaalokowana pamięć w komputerze Ale jeśli układ jest np. pięcioprzekątniowy to do zapisu macierzy A (w postaci wektorowej) potrzebujemy tylko P i <5Nfl 2 =2MB pamięci b) większa wydajność dla macierzy rzadkich (liczba elementów macierzy różnych od 0 jest rzędu N) w stosunku do metod bezpośrednich Macierze takie często pojawiają się w obliczeniach naukowych i inżynierskich (FEM, PDE) Metoda Jacobiego Dla dowolnie wybranego przybliżenia rozwiązania x 0 chcemy tak przekształacać iteracyjnie wektor x (k) aby doprowadzić do znikania składowych wektora reszt w k iteracjach co można zapisać x = [» 1 ;» 2 ; : : : ;» n ] b = [ 1; 2; : : : ; n] (b Ax (k) ) i = 0 i j a ij» (k) j = 0 6
a ii» (k) i = i Składowe wektora reszt znikają w kolejnych iteracjach, więc możemy zapisać» k+1 i = 1 a ii j j6=i 0 oraz dla całego wektora a ij» (k) j ; i = 1; 2; : : : ; n B @ i j j6=i a ij» (k) j 1 C A» (k+1) i = = 1 a ii i 0 @ Xi 1 j=1 Xi 1 j=1 a ij» (k+1) j a ii» (k+1) i j=i+1 a ij» (k+1) j a ij» (k) j = 0 j=i+1 a ij» (k) j + i 1 A x (k+1) = D 1 (L + U)x (k) + D 1 b W metodzie Jacobiego obliczamy kolejno wszystkie składowe nowego przybliżenia wektora rozwiązań. Metoda Gaussa-Seidla b Lx (k+1) Dx (k+1) Ux (k) = 0 x (k+1) = D 1 Lx (k+1) D 1 Ux (k) + D 1 b Różni się od metody Jacobiego tym, że obliczone już składniki» i k ; i = 1; 2; : : : ; j wykorzystywane są w obliczeniach składników j+1,j+2,...,n. 7
Metody Jacobiego i GS można zapisać ogólnie w postaci Mx (k+1) = Nx (k) + b = (M A)x (k) + b A = M N metoda Jacobiego: metoda Gaussa-Seidela: Metoda relaksacji M = D M = D + L b Lx (k+1) Dx (k+1) Ux (k) = 0 A = L + D + U!A =!D +!L +!U!A = (D +!L) + (!U (1!)D) Macierze iterujące i ich przekształcenia (preconditioning) Ogólny schemat iteracyjny x (k+1) = Gx (k) + f G J (A) = I D 1 A G GS (A) = I (D + L) 1 A przy podziale macierzy A A = M N definiujemy iterację do ustalonego punktu w jako x (k+1) = M 1 Nx (k) + M 1 b Z porównania obu zapisów dostajemy Metoda nadrelaksacji (SOR) (Successive Over Relaxation)» (k+1) i =!» (k+1)gs i! 2 (1; 2) + (1!)» (k) i (D +!L)x (k+1) = [!U + (1!)D]x k +!b G = M 1 N = M 1 (M A) = I M 1 A f = M 1 b 8
Proces iteracyjny x (k+1) = Gx (k) + f możemy potraktować także jako problem rozwiązania układu (I G)x = f co dla G=I-M -1 A daje układ równań M 1 Ax = M 1 b Układ ten ma identyczne rozwiązanie jak układ pierwotny. Co nam to daje? Z przepisu iteracyjnego x (k+1) = M 1 Nx (k) + M 1 b wynika, że musimy w każdej iteracji obliczyć M 1 Nx (k) = M 1 y (k) = z (k) Ponieważ M -1 nie znamy, więc chcemy niewielkim kosztem rozwiązać układ równań Mz (k) = y (k) Dla metod Jacobiego, Gaussa-Seidla i SOR macierz ta ma postać: M J = D M GS = D + L M SOR = 1 (D +!L)! Zbieżność metod iteracyjnych Dla macierzy definiujemy liczbę którą nazywamy promieniem spektralnym macierzy. Dla dowolnej macierzy kwadratowej zgodnej z normą wektorów prawdziwa jest nierówność Lemat Tw. Dla każdego wektora dążą do zera wtedy i tylko wtedy gdy Dowód ^ ">0 A 2 R n n j ij jjajj; _ ½(A) = max j ij i=1;2;:::;n i 2 Z jjajj p jjajj p ½(A) + " x 2 R n Ax; A 2 x; : : : ; A i x; : : : " = 1 ½(A) 2 jjajj p 1 + ½(A) < 1 2 jja n xjj p jjajj n p jjxjj p! 0 A n x! 0 elementy ciągu ½(A) < 1 9
Tw. Ciąg wektorów którego elementy wyznaczamy według wzoru jest zbieżny do jedynego punktu granicznego wtedy i tylko wtedy gdy Dowód x (0) ; x (1) ; : : : ; x (i) ; : : : x (i+1) = Gx (i) + f; i = 0; 1; : : : x (i+1) = Gx (i) + f = G(Gx (i 1) + f) + f = : : : = G i+1 x (0) + (G i f + G i 1 f + : : : + f) lim i!1 Gi+1 x (0)! 0 jjf + G 1 f + : : : + G i f + : : : jj p 1X jjfjj p jjgjj i p = jjfjj p 1 jjgjj p i=0 ½(G) < 1 Zbieżność w metodzie SOR G SOR = (D +!L) 1 [!U + (1!)D] det(g SOR ) = det (D +!L) 1 det (D +!L) 1 = det (!U + (1!)D) det (!U + (1!)D) = det((1!)d) det(g SOR ) = (1!) n det(g SOR ) = 1 2 : : : n j1!j 1 det(d +!L) = 1 det(d) = (1!) n det(d) max i=1;:::;n i = ½(G SOR ) < 1 0 <! < 2 Jeśli macierz układu jest symetryczna, dodatniookreślona i nieosobliwa to procedura iteracyjna jest zawsze zbieżna dla 0 <! < 2 10
Minimalizacja formy kwadratowej Jeśli Ax=b i r=b-ax to możemy utworzyć formę kwadratową postaci R = r T r = (b Ax) T (b Ax) Związek gradientu Q z kierunkiem poszukiwania przybliżonego rozwiązania. Prosta interpretacja geometryczna w 2D powierzchnie o stałej wartości Q mają kształt elipsy (hiperelipsy w przestrzeni o większej liczbie wymiarów). Która jest dodatniookreślona i przyjmuje wartość minimalną dla dokładnego rozwiązania x. W dalszych rozważaniach zakładamy że macierz A jest symetryczna i dodatniookreślona, wówczas możemy użyć formy kwadratowej postaci Q = 1 2 xt Ax x T b która ma minimum w x, ponieważ Q(x + x) Q(x) = 1 2 xt A x > 0 Proces poszukiwania rozwiązania dokładnego przebiega iteracyjnie, tj. szukamy ciągu przybliżeń x 1 ; x 2 ; x 3 ; : : : x 4 x 5 x 6 gdzie: x i+1 = x i + i v i x 3 Od sposobu wyznaczania α i i v i zależy zbieżność i x 1 x 2 szybkość metody. 11
Metoda największego spadku Przybliżone rozwiązanie w i+1 iteracji ma postać x i+1 = x i + i v i Jako v i wybieramy kierunek gradientu Q rq = Ax i b = r i v i = r i Kolejne przybliżenie w metodzie największego spadku opisuje wyrażenie x i+1 = x i + rt i r i ri T Ar i dla którego zachodzi warunek Q(x i+1 ) < Q(x i ) Metoda może być jednak wolnozbieżna w przypadku gdy hiperelipsoida ma wydłużony kształt co odpowiada złemu uwarunkowaniu układu. r i W celu znalezienia współczynnika i obliczamy Q(x i+1 ) Q(x i i r i ) = 1 2 xt i r 1 2 xt i b + 1 2 2 i r T i Ar i + i r T i r i i różniczkujemy je po parametrze wariacyjnym w celu znalezienia minimum @Q @ i = r T i r i + i r T i Ar i @Q @ i = 0! i = rt i r i r T i Ar i 12
Metoda sprzężonego gradientu Założenia: - x d jest rozwiązaniem dokładnym - ciąg wektorów v 1 ; v 2 ; v 3 ; : : : stanowi bazę w n-wymiarowej przestrzeni euklidesowej Różnicę rozwiązania dokładnego i przybliżonego możemy zapisać w postaci kombinacji liniowej elementów bazy x d x i = j v j j=1 Jeśli elementy bazy są ortogonalne to można łatwo wyznaczyć współczynniki kombinacji liniowej j = vt j (x d x i ) vj T v ; j = 1; 2; : : : j Żądamy więc, aby wektory bazy spełniały warunek A-ortogonalności (wektory A-sprzężone) v T j Av i = 0 $ i 6= j Dla macierzy dodatniookreślonej zachodzi warunek v T i Av i 6= 0 Jak skonstruować bazę A-ortogonalną? Jeśli dysponujemy zwykłą bazą wektorów u 1 ; u 2 ; u 3 ; : : : to możemy ją poddać procesowi ortogonalizacji Grama-Schmidta v 1 = u 1 v i+1 = u i+1 + ix k=1 i+1;k v k Ale powyższy wzór wymaga modyfikacji ponieważ nie znamy wektora x d, wiemy jednak, że Ax d =b więc j = vt j A(x d x i ) v T j Av j = vt j r i v T j Av j i+1;k = vt k Au i+1 v T k Av k Jak utworzyć ciąg wektorów u i? 13
W metodzie CG bazę stanowią wektory reszt (kierunki gradientów), które dzięki A- ortogonalizacji są sprzężone. Kolejne przybliżenia w podstawowej metodzie CG wyznaczamy zgodnie z poniższym schematem: W podstawowej metodzie CG w każdej iteracji należy wykonać dwa mnożenia macierz-wektor Av i Ar i+1 i to te dwie operacje determinują nakład obliczeń. Algorytm metody CG można przedstawić w alternatywnej postaci, gdzie wymagamy tylko jednego mnożenia macierz-wektor: v 1 = r 1 = b Ax 1 i = vt i r i v T i Av i x i+1 = x i + i v i r i+1 = r i i Av i i = vt i Ar i+1 vi T Av i v i+1 = r i+1 + iv i Dzięki A-ortogonalności w każdej iteracji wystarczy wyznaczyć tylko jeden współczynnik (reszta współczynników znika). v 1 = r 1 = b Ax 1 i = rt i r i v i Av i x i+1 = x i + i v i r i+1 = r i i Av i i = rt i+1 r i+1 ri T r i v i+1 = r i+1 + iv i Maksymalna liczba iteracji w metodzie CG wynosi n+1 więc jest metodą skończoną. Zazwyczaj do uzyskania akceptowalnego rozwiązania wystarcza wykonanie znacznie mniejszej liczby iteracji. 14
W metodzie CG bazę stanowią wektory reszt (kierunki gradientów), które dzięki A- ortogonalizacji są sprzężone. Kolejne przybliżenia w podstawowej metodzie CG wyznaczamy zgodnie z poniższym schematem: W podstawowej metodzie CG w każdej iteracji należy wykonać dwa mnożenia macierz-wektor Av i Ar i+1 i to te dwie operacje determinują nakład obliczeń. Algorytm metody CG można przedstawić w alternatywnej postaci, gdzie wymagamy tylko jednego mnożenia macierz-wektor: v 1 = r 1 = b Ax 1 i = vt i r i v T i Av i x i+1 = x i + i v i r i+1 = r i i Av i i = vt i Ar i+1 vi T Av i v i+1 = r i+1 + iv i Dzięki A-ortogonalności w każdej iteracji wystarczy wyznaczyć tylko jeden współczynnik (reszta współczynników znika). v 1 = r 1 = b Ax 1 i = rt i r i v i Av i x i+1 = x i + i v i r i+1 = r i i Av i i = rt i+1 r i+1 ri T r i v i+1 = r i+1 + iv i Maksymalna liczba iteracji w metodzie CG wynosi n+1 więc jest metodą skończoną. Zazwyczaj do uzyskania akceptowalnego rozwiązania wystarcza wykonanie znacznie mniejszej liczby iteracji. 15
Macierz A nxn a ij = 1 1 + ji jj ; ji jj 5 _ a ij = 0; ji jj > 5 Uwaga: wyniki uzyskano w pojedynczej precyzji 16