Rozwiązywanie algebraicznych układów równań liniowych
Transkrypt
Rozwiązywanie algebraicznych układów równań liniowych
Rozwiązywanie algebraicznych układów równań liniowych metodami iteracyjnymi Plan wykładu: 1. 2. 3. 4. Przykłady macierzy rzadkich i formaty ich zapisu Metody: Jacobiego, Gaussa-Seidla, nadrelaksacji Zbieżność metod iteracyjnych 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 Łopata turbiny 2802 x 2802, 6342 NZ DWT 234: Wieża z platformą DWT 607: Wirnik Wankela 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 = kolumna = wiersz = (1 (1 (1 -1 2 4 -3 4 5 5 2 8 4 3 9 6 4 4 5 10) 4 6 3 4 14) 4 5 7 4 -5) 5) CSR dla macierzy niesymetrycznej wartości = kolumna = wiersz = (1 (1 (1 -1 2 4 -3 4 6 -2 1 9 5 2 12 -4 1 2 3 7 4 8 2 -5) 5) 3 Mnożenie Ax=y w formacie CSR dla macierzy niesymetrycznej n X aij xj = yi j=1 a[ ] - elementy macierzowe, k[] - numery kolumn, w[]-indeksy z poczatkami wierszy y=0; for(i=1; i<n; i++){ l1=w[i]; l2=w[i+1]-1; // początek indeksow dla i-tego wiersza // koniec indeksów dla i-tego wiersza for(l=l1; l<=l2; 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=UT (U+D+L)x = y =(D+U)x + (xTU)T Czyli n X j=1 aij xj = yi ! n X aij xj + j=i X xj aji j<i Jeśli zamienimy wskaźniki w drugiej sumie to element aij*xi będzie dawać wkład do yj , 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++){ l1=w[i]; l2=w[i+1]-1; // początek indeksow dla i-tego wiersza // koniec indeksów dla i-tego wiersza for(l=l1; l<=l2; 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 Rn£n ; Oznaczmy A jako sumę 3 macierzy A=L+D+U x; b 2 Rn U Dlaczego używamy metod iteracyjnych? D Przykład L N=50000 – liczba równań w układzie fl2 = 8 bajtów/liczbę – podwójna precyzja a) Ograniczenia pamięci Metoda Jacobiego Pd<N2fl2= 20 GB (10GB) – zaalokowana pamięć w komputerze x = [»1 ; »2 ; : : : ; »n ] Ale jeśli układ jest np. pięcioprzekątniowy to do zapisu macierzy A (w postaci wektorowej) potrzebujemy tylko Pi<5Nfl2 =2MB pamięci Dla dowolnie wybranego przybliżenia rozwiązania x 0 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) b = [¯1 ; ¯2 ; : : : ; ¯n ] chcemy tak przekształacać iteracyjnie wektor x (k) aby doprowadzić do znikania składowych wektora reszt w k iteracjach (b ¡ Ax(k) )i = 0 co można zapisać ¯i ¡ n X (k) aij »j =0 j 6 (k) aii »i = ¯i ¡ n X (k) aij »j ; ¯i ¡ i = 1; 2; : : : ; n j j6=i Składowe wektora reszt znikają w kolejnych iteracjach, więc możemy zapisać »ik+1 0 n 1 X 1 B (k) C = aij »j A @¯i ¡ aii j j6=i oraz dla całego wektora 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 i¡1 X j=1 (k+1) ¡aii »i (k+1) »i (k+1) aij »j ¡ n X (k) aij »j =0 j=i+1 = 0 1 i¡1 n X 1 @ X (k+1) (k) = ¡ aij »j ¡ aij »j + ¯i A aii j=1 j=i+1 b ¡ Lx(k+1) ¡ Dx(k+1) ¡ U x(k) = 0 x(k+1) = ¡D ¡1 Lx(k+1) ¡ D¡1 U x(k) + D¡1 b Różni się od metody Jacobiego tym, że obliczone już składniki »ik ; 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 M x(k+1) = N x(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) ¡ U x(k) = 0 A !A !A = = = L+D+U !D + !L + !U (D + !L) + (!U ¡ (1 ¡ !)D) (k+1) (k+1)GS = !»i Ogólny schemat iteracyjny x(k+1) GJ (A) = = GGS (A) = Gx(k) + f I ¡ D ¡1 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 N x(k) + M ¡1 b Z porównania obu zapisów dostajemy G = M ¡1 N = M ¡1 (M ¡ A) = I ¡ M ¡1 A Metoda nadrelaksacji (SOR) (Successive Over Relaxation) »i Macierze iterujące i ich przekształcenia (preconditioning) (k) + (1 ¡ !)»i f = M ¡1 b (D + !L)x(k+1) = [¡!U + (1 ¡ !)D]xk + !b ! 2 (1; 2) 8 Proces iteracyjny Zbieżność metod iteracyjnych x(k+1) = Gx(k) + f możemy potraktować także jako problem rozwiązania układu (I ¡ G)x = f -1 co dla G=I-M 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 Dla macierzy definiujemy liczbę j¸i j · jjAjj; Lemat M z (k) = y (k) Dla metod Jacobiego, Gaussa-Seidla i SOR macierz ta ma postać: MJ MGS = = MSOR = D D+L 1 (D + !L) ! ^ _ ">0 jjAjjp max i=1;2;:::;n j¸i j ¸i 2 Z jjAjjp · ½(A) + " Tw. Dla każdego wektora M ¡1 N x(k) = M ¡1 y(k) = z (k) Ponieważ M-1 nie znamy, więc chcemy niewielkim kosztem rozwiązać układ równań ½(A) = którą nazywamy promieniem spektralnym macierzy. Dla dowolnej macierzy kwadratowej zgodnej z normą wektorów prawdziwa jest nierówność x(k+1) = M ¡1 N x(k) + M ¡1 b wynika, że musimy w każdej iteracji obliczyć A 2 Rn£n x 2 Rn elementy ciągu Ax; A2 x; : : : ; Ai x; : : : dążą do zera wtedy i tylko wtedy gdy Dowód ½(A) < 1 1 ¡ ½(A) 2 1 + ½(A) jjAjjp · <1 2 n jjA xjjp · jjAjj n p jjxjj p ! 0 An x ! 0 "= 9 Tw. Ciąg wektorów Zbieżność w metodzie SOR x(0) ; x(1) ; : : : ; x(i) ; : : : którego elementy wyznaczamy według wzoru x(i+1) = Gx(i) + f; i = 0; 1; : : : jest zbieżny do jedynego punktu granicznego wtedy i tylko wtedy gdy ½(G) < 1 Dowód x(i+1) = Gx(i) + f = G(Gx(i¡1) + f ) + f = : : : = Gi+1 x(0) + (Gi f + Gi¡1 f + : : : + f ) lim Gi+1 x(0) ! 0 i!1 jjf + G1 f + : : : + Gi f + : : : jjp · 1 X jjf jjp · jjf jjp jjGjjip = 1 ¡ jjGjjp i=0 GSOR = (D + !L)¡1 [¡!U + (1 ¡ !)D] det(GSOR ) = £ ¡ ¢ ¡1 det (D + !L) det (¡!U + (1 ¡ !)D) ¡ ¢ det (D + !L)¡1 = 1 1 = det(D + !L) det(D) det (¡!U + (1 ¡ !)D) = = det((1 ¡ !)D) (1 ¡ !)n det(D) det(GSOR ) = (1 ¡ !)n det(GSOR ) = ¸1 ¸2 : : : ¸n j1 ¡ !j · max ¸i = ½(GSOR ) < 1 i=1;:::;n 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 = rT 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 T x Ax ¡ xT b 2 która ma minimum w x, ponieważ Q(x + ¢x) ¡ Q(x) = 1 ¢xT A¢x > 0 2 Proces poszukiwania rozwiązania dokładnego przebiega iteracyjnie, tj. szukamy ciągu przybliżeń x4 x1 ; x2 ; x3 ; : : : gdzie: x3 xi+1 = xi + ®i vi Od sposobu wyznaczania αi i vi zależy zbieżność i szybkość metody. x5 x6 x2 x1 11 Metoda największego spadku Przybliżone rozwiązanie w i+1 iteracji ma postać xi+1 = xi + ®i vi Jako vi wybieramy kierunek gradientu Q rQ = Axi ¡ b = ¡ri vi = ¡ri Kolejne przybliżenie w metodzie największego spadku opisuje wyrażenie xi+1 riT ri = xi + T ri ri Ari dla którego zachodzi warunek Q(xi+1 ) < Q(xi ) Metoda może być jednak wolnozbieżna w przypadku gdy hiperelipsoida ma wydłużony kształt co odpowiada złemu uwarunkowaniu układu. W celu znalezienia współczynnika i obliczamy Q(xi+1) Q(xi ¡ ®i ri ) = + 1 1 ¡ xTi r ¡ xTi b 2 2 1 2 T ®i ri Ari + ®i riT ri 2 i różniczkujemy je po parametrze wariacyjnym w celu znalezienia minimum @Q = riT ri + ®i riT Ari @®i @Q riT ri = 0 ! ®i = ¡ T @®i ri Ari 12 Metoda sprzężonego gradientu Założenia: - xd jest rozwiązaniem dokładnym - ciąg wektorów v1 ; v2 ; v3 ; : : : Rządamy więc, aby wektory bazy spełniały warunek A-ortogonalności (wektory A-sprzężone) vjT Avi = 0 $ i 6= j Dla macierzy dodatniookreślonej zachodzi warunek 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 xd ¡ x1 = n X ®j = Jak skonstruować bazę A-ortogonalną? Jeśli dysponujemy zwykłą bazą wektorów u1 ; u2 ; u3; : : : ®j vj j=1 Jeśli elementy bazy są ortogonalne to można łatwo wyznaczyć współczynniki kombinacji liniowej vjT (xd ¡ vjT vj viT Avi 6= 0 x1 ) ; j = 1; 2; : : : Ale powyższy wzór wymaga modyfikacji ponieważ nie znamy wektora xd, wiemy jednak, że Axd=b więc vjT A(xd ¡ x1 ) vjT r1 ®j = = T vjT Avj vj Avj to możemy ją poddać procesowi ortogonalizacji Grama-Schmidta v1 vi+1 = = u1 ui+1 + i X ¯i+1;k vk k=1 ¯i+1;k = vkT Aui+1 ¡ T vk Avk Jak utworzyć ciąg wektorów ui? 13 W metodzie CG bazę stanowią wektory reszt (kierunki gradientów), które dzięki Aortogonalizacji są sprzężone. Kolejne przybliżenia w podstawowej metodzie CG wyznaczamy zgodnie z poniższym schematem: xi+1 = r1 = b ¡ Ax1 ¡ ¡¡¡¡¡¡¡ viT ri = viT Avi = xi + ®i vi ri+1 = ¯i = vi+1 = v1 ¡ ®i ri ¡ ®i Avi viT Ari+1 ¡ T vi Avi ri+1 + ¯i vi Dzięki A-ortogonalności w każdej iteracji wystarczy wyznaczyć tylko jeden współczynnik (reszta współczynników znika). W podstawowej metodzie CG w każdej iteracji należy wykonać dwa mnożenia macierz-wektor Ari+1 Avi 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: v1 ¡ = ¡ ®i = xi+1 = ri+1 = ¯i = vi+1 = r1 = b ¡ Ax1 ¡¡¡¡¡¡¡ riT ri vi Avi xi + ®i vi ri ¡ ®i Avi T ri+1 ri+1 ¡ T ri ri ri+1 + ¯i vi 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