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