Rozwiązywanie równań liniowych
Transkrypt
Rozwiązywanie równań liniowych
Rozdziaª 8 Rozwi¡zywanie równa« liniowych. W tym rozdziale zajmiemy si¦ algorytmami zwi¡zanymi z algebr¡ liniow¡, a dokªadnie rozwi¡zywaniem ukªadów równa« liniowych. Interesuje nas zadanie znalezienia rozwi¡zania ukªadu równa« liniowych: As = f (8.1) gdzie A to macierz nieosobliwa n × n i f to wektor prawej strony. 8.1 Operator backslash Podstawowym operatorem rozwi¡zuj¡cym (8.1) jest operator: octave'a \. Jego zastosowanie jest bardzo proste x=A\ f Przetestujmy ten operator dla kilku macierzy: A=[1 1; − 1 1 ] ; s =[1; 3 ] ; f=A∗ s ; x=A\ f ; x−s norm ( x−s , 2 ) norm (A∗ x−f , 2 ) We¹my macierz prawie osobliw¡: A=[1 1+2∗ eps ; 1 s =[1; 3] f=A∗ s ; x=A\ f 1]; 83 x−s norm ( x−s , 2 ) norm (A∗ x−f , 2 ) Wywoªanie operatora A\f zwróciªo ostrze»enie i daªo niepoprawny wynik. Zauwa»my, »e norma residualna kA ∗ x − f k2 jest maªa, podczas gdy rozwi¡zanie jest zupeªnie zªe: kx − sk2 > 1. Nasza macierz zostaªa specjalnie tak dobrana, aby odpowiedni algorytm u»ywany przez octave'a nie zwróciª poprawnego wyniku - ale w praktycznych zastosowaniach istniej¡ takie macierze, dla których bª¦dy zaokr¡gle« powoduj¡, »e rozwi¡zywanie ukªadów równa« liniowych z nimi jest obarczone ogromnym bª¦dem. Operator \ mo»e te» w jednym wywoªaniu rozwi¡za¢ ukªad równa« liniowych z praw¡ stron¡ b¦d¡c¡ macierz¡, tzn.: AX = F gdzie A to macierz nieosobliwa n × n, X, F to macierze n × m. Wywoªujemy po prostu X=A\F Taki ukªad jest równowa»ny m ukªadom z macierz¡ A i prawymi stronami kolumnami macierzy F , jako »e: AX = (Ax1 , Ax2 , . . . , Axm ) = (f1 , . . . , fm ) = F. P¦tle w octave'ie dziaªaj¡ wolno, wi¦c - je±li to mo»liwe - nale»y unika¢ ich wywoªywania. Na poni»szym przykªadzie porównamy czas dziaªania operatora \ w p¦tli i wywoªania bezpo±redniego. Rozpatrzmy ukªad z macierz¡ losow¡, ale silnie diagonalnie dominuj¡c¡: n =100; m=100; A=2∗ eye ( n , n ) + ( 1 / n ) ∗ rand ( n , n ) ; S=rand ( n ,m) ; X=XX=zeros ( n ,m) ; F=A∗ S ; tic ;X=A\F ; t 1=toc #a t e r a z w p e t l i tic ; for k =1:m, XX( : , k)=A\F ( : , k ) ; endfor t 2=toc t2 / t1 84 Na moim komputerze czas oblicze« w p¦tli byª ponad 50 razy dªu»szy. Sprawd¹my, czy wyniki s¡ poprawne: norm (X−XX, 1 ) norm (X−S , 1 ) norm (A∗X−F , 1 ) Wszystkie bª¦dy s¡ maªe. 8.2 Macierz odwrotna W octave'ie funkcja inv(A) zwraca macierz odwrotn¡ (o ile ona istnieje.) Sprawd¹my, jak to dziaªa: A=[1 1; − 1 1 ] ; iA=inv (A ) ; A∗ iA iA ∗A norm (A∗ iA− eye ( 2 ) , 1 ) norm ( iA ∗A− eye ( 2 ) , 1 ) Sprawd¹my, jak dziaªa ta funkcja dla macierzy prawie osobliwej: A=[1 1+2∗ eps ; 1 1 ] ; iA=inv (A ) ; A∗ iA iA ∗A norm (A∗ iA− eye ( 2 ) , 1 ) norm ( iA ∗A− eye ( 2 ) , 1 ) Macierz odwrotna jest poprawna. Teraz sprawd¹my, czy mo»emy rozwi¡za¢ ukªad równa« liniowych z wykorzystaniem macierzy odwrotnej: s =[1;3]; f=A∗ s ; x=iA ∗ f ; x−s norm ( x−s , 2 ) norm (A∗ x−f , 2 ) Wynik jest znów nieprawidªowy. Macierz odwrotn¡ mo»na te» obliczy¢ jednym wywoªaniem operatora \: iA=A\ eye ( size (A) ) Przetestujmy ten sposób: 85 A=[1 1; − 1 1 ] ; I d=eye ( size (A ) ) ; iA=A\ I d iA2=inv (A) norm ( iA ∗A, 1 ) norm ( iA−iA2 , 1 ) Norma ró»nicy obu macierzy odwrotnych jest identyczna, czyli oba sposoby s¡ równowa»ne. 8.3 Wspóªczynnik uwarunkowania macierzy Rysunek 8.1: Wykres wspóªczynnika uwarunkowania macierzy Hilberta w skali póªlogarytmicznej. Wspóªczynnik uwarunkowania macierzy w danej normie deniujemy jako: cond(A, k · k) = kAkkA−1 k. 86 Rysunek 8.2: Wykres bª¦du w normie drugiej pomi¦dzy rozwi¡zaniem dokªadnym ukªadu równa« z macierz¡ Hilberta, a rozwi¡zaniem otrzymanym przez operator backslash octave'a. Jak wiadomo, por. [11], je±li macierz jest ¹le uwarunkowana, tzn. je±li ten wspóªczynnik jest du»y wzgl¦dem dokªadno±ci arytmetyki, to rozwi¡zywanie ukªadu równa« liniowych z macierz¡ A mo»e by¢ obarczone du»ym bª¦dem. Znan¡ ¹le uwarunkowan¡ macierz¡ jest tzw. macierz Hilberta: HN = 1 i+j−1 N i,j=1 Jest to macierz symetryczna i dodatnio okre±lona. W octave'ie funkcja H=hilb(N) tworzy macierz Hilberta tylko z zamienion¡ kolejno±ci¡ wierszy i kolumn (ale permutowanie wierszy i kolumn nie zmienia uwarunkowania macierzy). Sprawd¹my jej wspóªczynnik uwarunkowania w normie drugiej: M=25; c=zeros (M, 1 ) ; 87 Rysunek 8.3: Wykres bª¦du w normie drugiej pomi¦dzy rozwi¡zaniem dokªadnym ukªadu równa« z macierz¡ Hilberta, a rozwi¡zaniem otrzymanym przez operator backslash octave'a. for j =1:M, c ( j )=cond ( hilb ( j ) ) ; endfor semilogy ( c , " ; wsp uwar m a c i e r z y H i l b e r t a ; " ) Uwarunkowanie wzrasta wykªadniczo - jak wida¢ na wykresie w skali póªlogarytmicznej, por. rysunek 8.1. Przetestujmy, jak dziaªa operator octave'a \ zastosowany do rozwi¡zywania ukªadu równa« liniowych z macierz¡ Hilberta. M=11; e r=e r r=zeros (M, 1 ) ; for j =1:M, H=hilb ( j ) ; s=ones ( j , 1 ) ; f=H∗ s ; x=H\ f ; 88 e r ( j )=norm ( x−s , 2 ) ; e r r ( j )=norm (H∗ x−f , 2 ) ; endfor plot ( 1 :M, e r , " ; b l a d ; " ) plot ( 1 :M, e r r , " ; b l a d r e s i d u a l n y ; " ) Bª¡d residualny, tzn. kH ∗ x − f k2 jest na poziomie bª¦du zaokr¡gle«, por. rysunek 8.2, ale bª¡d w normie drugiej gwaªtownie ro±nie dla N > 9, por. rysunek 8.3. Dla wymiaru N ≥ 12 operator octave'a zwraca ostrze»enie, »e macierz jest numerycznie osobliwa, i »e nie da si¦ rozwi¡za¢ tego ukªadu równa«. Octave wtedy rozwi¡zuje to równanie w sensie LZNK, por. Rozdziaª 9. Prosz¦ zauwa»y¢, »e w praktyce nie znamy rozwi¡zania, wi¦c mo»emy obliczy¢ tylko bª¡d residualny, tzn. norm¦ H ∗x−f . Norma bª¦du residualnego mo»e by¢ na poziomie bª¦du arytmetyki zmiennopozycyjnej, podczas gdy realny bª¡d mo»e by¢ o kilka rz¦dów, czy nawet kilkana±cie rz¦dów wielko±ci wi¦kszy. 8.4 Rozkªady macierzy Podstawowymi algorytmami bezpo±rednimi rozwi¡zywania ukªadu (8.1) s¡ tzw. rozkªady macierzy: rozkªad LU , rozkªad LT L - o ile A jest symetryczna, dodatnio okre±lona i rozkªad QR. Tutaj L oznacza macierz dolnotrójk¡tn¡, U, R - macierze górnotrójk¡tne, Q - macierz ortogonaln¡ (QT Q = QQT = I ). 8.4.1 Rozkªad LU Podstawowym algorytmem jest tzw. eliminacja Gaussa, która dla dowolnej macierzy nieosobliwej zwraca - w wersji z cz¦±ciowym wyborem elementu gªównego (czyli inaczej z cz¦±ciowym osiowaniem) - nast¦puj¡cy rozkªad typu LU : P A = LU gdzie P to macierz permutacji, U to macierz nieosobliwa górnotrójk¡tna, L to macierz dolnotrójk¡tna z jedynkami na diagonali. Znaj¡c ten rozkªad mo»emy rozwi¡za¢ ukªad Ax = b w trzech krokach: 1. Policz f = P b 2. Rozwi¡» ukªad z macierz¡ dolnotrójk¡tn¡ Ly = f (P Ax = LU x = P b) 3. Rozwi¡» ukªad z macierz¡ górnotrójk¡tn¡ U x = y 89 Mo»emy te» obliczy¢ wyznacznik A korzystaj¡¢ z tego, »e det(A) = det(P )det(U ) = det(P ) Πk ukk . Wyznacznik P wynosi jeden albo minus jeden, w zale»no±ci od tego, czy permutacja jest parzysta, czy nieparzysta. Je±li macierz A jest symetryczna i dodatnio okre±lona, tzn. A = AT xT Ax > 0 x 6= 0 to algorytm Choleskiego zwraca macierz dolnotrójk¡tn¡ L tak¡, »e A = LLT . Z kolei je±li macierz n × n A jest nieosobliwa, to istnieje rozkªad QR tej macierzy, tzn. istniej¡ macierze tego samego wymiaru co A: ortogonalna Q (tzn. QT Q = I ) oraz macierz nieosobliwa górnotrójk¡tna R takie, »e A = QR. Aby rozwi¡za¢ Ax = b wykorzystuj¡c ten rozkªad nale»y rozwi¡za¢ równowa»ny ukªad: Rx = QT b z macierz¡ górnotrójk¡tn¡. Do znalezienia rozkªadu LU macierzy sªu»y funkcja octave'a: [ L , U, P]= lu (A ) ; Argumentem jest macierz kwadratowa A, a funkcja zwraca L, U, P - odpowiednie macierze rozkªadu LU . Przetestujmy te rozkªady na kilku prostych macierzach. Na pocz¡tek rozpatrzmy macierz symetryczn¡ i znajd¹my jej rozkªad LU : A=[3 1 ; 1 3 ] [ L , U, P]= lu (A) L ∗U−P∗A norm ( L∗U−P∗A, 1 ) Wynik jest prawidªowy. Zastosujmy do rozwi¡zania ukªadu równa« liniowych z macierz¡ A i znanym rozwi¡zaniem: s =[1; −2]; b=A∗ s ; f=P∗ b ; y=L\ f ; x=U\y x−s norm ( x−s , 1 ) 90 xx=A\ f xx−s norm ( xx−s , 1 ) Do znalezienia rozkªadu Choleskiego A = LLT macierzy symetrycznej dodatnio okre±lonej sªu»y funkcja octave'a R=chol(A), której argumentem jest macierz A, a funkcja zwraca macierz górnotrójk¡tn¡ R tak¡, »e RT ∗ R = A, czyli R to transponowana macierz L z naszego rozkªadu Choleskiego. Porównajmy rozkªad Choleskiego tej samej macierzy co w poprzednim przypadku. R = chol (A) Er=R' ∗ R−A norm ( Er , 1 ) Przetestujmy ten rozkªad do znalezienia rozwi¡zania równania. y=R' \ b ; xc=R\y xc−s norm ( xc−s , 1 ) Otrzymali±my poprawne wyniki. 8.4.2 Rozkªad QR Ostatni typ rozkªadu macierzy, sªu»¡cy rozwi¡zaniu ukªadu równa« liniowych, to rozkªad QR. Do otrzymania takiego rozkªadu w octave'ie sªu»y funkcja: [ Q, R]= qr (A) Argumentem jest macierz A, a zwracanymi warto±ciami macierze rozkªadu. Przetestujmy t¦ funkcj¦ na przykªadzie tej samej macierzy A, co w powy»szym przykªadzie: [ Q, R]= qr (A) Er=Q∗R−A norm ( Er , 1 ) norm (Q∗Q' − eye ( size (A) ) , 1 ) Zastosujmy ten rozkªad do rozwi¡zania ukªadu równa« liniowych Ax = b. f=Q' ∗ b ; xq=R\ f xq−s norm ( xq−s , 1 ) 91 Metoda, jak wida¢, dziaªa. Przetestujmy rozkªady QR i LU dla macierzy nieosobliwej niesymetrycznej, lub symetrycznej ale nieokre±lonej. Rozpatrzmy macierz niesymetryczn¡ nieosobliw¡ i jej rozkªad LU : A=[1 1 ; 2 1 ] [ L , U, P]= lu (A) L ∗U−P∗A norm ( L∗U−P∗A, 1 ) Przetestujmy rozkªad QR: [ Q, R]= qr (A) Er=Q∗R−A norm ( Er , 1 ) norm (Q∗Q' − eye ( size (A) ) , 1 ) norm (Q' ∗ Q−eye ( size (A) ) , 1 ) Co si¦ stanie je±li zastosujemy metod¦ Choleskiego? clear R chol R = (A) Powtórzymy to samo dla macierzy symetrycznej ale nieokre±lonej: Najpierw metoda Choleskiego pozwoli nam sprawdzi¢, czy macierz rzeczywi±cie nie jest okre±lona: A=[−4 1 ; 1 5 ] R = chol (A) Czyli macierz nie jest dodatnio okre±lona. Zauwa»my, »e algorytm Choleskiego jest najprostsz¡ obliczeniowo metod¡ sprawdzenia, czy macierz jest dodatni okre±lona. Teraz znajd¹my rozkªad LU macierzy A: [ L , U, P]= lu (A) L ∗U−P∗A norm ( L∗U−P∗A, 1 ) a nast¦pnie rozkªad QR: [ Q, R]= qr (A) Er=Q∗R−A norm ( Er , 1 ) norm (Q∗Q' − eye ( size (A) ) , 1 ) norm (Q' ∗ Q−eye ( size (A) ) , 1 ) Rozpatrzmy teraz przykªad ¹le uwarunkowanej macierzy Hilberta dla wi¦kszego N = 5, 15. Najpierw przypadek N = 5: 92 N=5; H=hilb (N ) ; R = chol (H ) ; norm (R' ∗ R−H, 1 ) [ L , U, P]= lu (H) norm ( L∗U−P∗H, 1 ) [ Q, R]= qr (H ) ; norm (Q∗R−H, 1 ) norm (Q∗Q' − eye ( size (H) ) , 1 ) norm (Q' ∗ Q−eye ( size (H) ) , 1 ) Spróbujmy wykona¢ te same obliczenia dla N = 20: N=20; H=hilb (N ) ; R = chol (H ) ; Czy inne rozkªady mo»na przeprowadzi¢? [ L , U, P]= lu (H ) ; norm ( L∗U−P∗H, 1 ) [ Q, R]= qr (H ) ; norm (Q∗R−H, 1 ) norm (Q∗Q' − eye ( size (H) ) , 1 ) norm (Q' ∗ Q−eye ( size (H) ) , 1 ) Spróbujmy rozwi¡za¢ Ax = b za pomoc¡ tych rozkªadów: s= rand (N , 1 ) ; f=H∗ s ; y=L \ (P∗ f ) ; x=U\y ; norm (H∗ x−f , 1 ) norm ( x−s , 1 ) Niestety wynik jest bardzo zªy. A co z wynikiem uzyskanym przy pomocy rozkªadu QR? xx=R\ (Q' ∗ f ) ; norm (H∗ xx−f , 1 ) norm ( xx−s , 1 ) Uwarunkowanie macierzy tego ukªadu jest bardzo du»e. aden algorytm bezpo±redni rozwi¡zywania ukªadów równa« liniowych, przy takiej dokªadno±ci oblicze« w arytmetyce zmiennopozycyjnej podwójnej precyzji, nie jest w stanie znale¹¢ rozwi¡zania. 93