Zad. 6. Rozkład LU macierzy kwadratowej z

advertisement
Zad. 6. Rozkład LU macierzy kwadratowej z
częściowym wyborem elementu głównego
e-mail: [email protected]
tel.: 56611-3274
pokój: 485
http://www.fizyka.umk.pl/˜tecumseh/MN16/
Zadanie 6
Zmodyfikuj program dokonujący rozkładu LU macierzy metodą
Doolittle’a (albo Crouta) włączając częściowy wybór elementu
głównego.
Powtórka: rozkład LU
I A - nieosobliwa macierz kwadratowa n × n o elementach rzeczywistych
I det Ak 6= 0, gdzie Ak - macierz k × k utworzona z k początkowych wierszy i
kolumn macierzy A
I Rozkład A = LU, gdzie L - macierz trójkątna dolna n × n, U - macierz trójkątna
górna n × n, tzn.
(L)ij =
n
0 i <j
`ij i ­ j
(U)ij =
n
uij i ¬ j
0 i >j
I Mamy n2 równań na elementy macierzy A
aij =
n
X
r
X
k=1
k=1
(L)ik (U)kj =
`ik ukj ,
gdzie r = min(i, j)
I Jeżeli `ii = 1 albo uii = 1 dla i = 1, ..., n, to mamy w sumie do wyznaczenia n2
elementów macierzy L i U
Powtórka: schematy zwarte - metoda Doolittle’a
I Zakładamy, że `ii = 1 dla i = 1, ..., n
I Wykonujemy k = 1, ..., n kroków; w k-tym kroku
1. Wyznaczamy k-ty wiersz macierzy U (j ­ k)
akj =
k
X
⇒
`kp upj
ukj = akj −
k−1
X
`kp upj
j = k, k + 1, ..., n
p=1
p=1
2. Wyznaczamy k-tą kolumnę macierzy L (i > k)
aik =
k
X
p=1
`ip upk
⇒
`ik =
aik −
k−1
X
!
`ip upk
/ukk
i = k + 1, ..., n
p=1
I W pierwszym kroku znamy `11 = 1, co pozwala najpierw wyznaczyć pierwszy
wiersz macierzy U, a to z kolei pozwala wyznaczyć pierwszą kolumnę macierzy L
I W k-tym kroku znamy `kk = 1, k − 1 początkowych wierszy macierzy U i k − 1
początkowych kolumn macierzy L, to pozwala najpierw wyznaczyć k-ty wiersz
macierzy U, a to z kolei pozwala wyznaczyć k-tą kolumnę macierzy L
Powtórka: schematy zwarte - metoda Crouta
I Zakładamy, że uii = 1 dla i = 1, ..., n
I Wykonujemy k = 1, ..., n kroków; w k-tym kroku
1. Wyznaczamy k-tą kolumnę macierzy L (i ­ k)
aik =
k
X
`ip upk
⇒
`ik = aik −
k−1
X
`ip upk
i = k, k + 1, ..., n
p=1
p=1
2. Wyznaczamy k-ty wiersz macierzy U (j > k)
akj =
k
X
p=1
`kp upj
⇒
ukj =
akj −
k−1
X
!
`kp upj
/`kk
j = k + 1, ..., n
p=1
I W pierwszym kroku znamy u11 = 1, co pozwala najpierw wyznaczyć pierwszą
kolumnę macierzy L, a to z kolei pozwala wyznaczyć pierwszy wiersz macierzy U
I W k-tym kroku znamy `kk = 1, k − 1 początkowych wierszy macierzy U i k − 1
początkowych kolumn macierzy L, to pozwala najpierw wyznaczyć k-tą kolumnę
macierzy L, a to z kolei pozwala wyznaczyć k-ty wiersz macierzy U
Częściowy wybór elementu głównego - motywacje
I
Dokonać rozkładu LU macierzy


1 1
1


A =  2 −2 2 
3 3 −3
I
Zamieniamy wiersze w macierzy A


1 1
1


A0 =  3 3 −3 
2 −2 2
Dokonać rozkładu LU tej macierzy
I
Czy w obydwu przypadkach udało się dokonać rozkładu LU?
Częściowy wybór elementu głównego - metoda Doolittle’a
I k-ty krok metody Doolittle’a
1. Wyznaczamy k-ty wiersz macierzy U (j ­ k)
ukj = akj −
k−1
X
`kp upj
j = k, k + 1, ..., n
p=1
2. Wyznaczamy k-tą kolumnę macierzy L (i > k)
`ik =
aik −
k−1
X
!
`ip upk
/ukk
i = k + 1, ..., n
p=1
I Problemy: ukk = 0 lub |ukk | ∼ 0 (np. „śmieci numeryczne”)
I Wybór elementu głównego:
1 wyznaczamy k-ty wiersz macierzy U
1a przed wyznaczeniem k-tej kolumny macierzy L szukamy w k-tym wierszu
macierzy U elementu o maksymalnej wartości bezwzględnej, tzn.
max |ukj | ⇒ ukjmax
j=k,...,n
1b zamieniamy w macierzy U kolumny k i jmax
2 wyznaczamy k-tą kolumnę macierzy L
Częściowy wybór elementu głównego - metoda Doolittle’a
I Uzyskujemy rozkład A = LU0 , gdzie U0 jest macierzą trójkątną górną, w której
poprzestawialiśmy kolumny
I Macierz U0 można przedstawić jako U0 = UP, gdzie U jest macierzą trójkątną
górną, a P jest macierzą permutacji
I Rozkład macierzy A przyjmuje wtedy następującą postać
A = LUP
I Pojedynczą zamianę kolumn i i j w macierzy U można przedstawić jako iloczyn
macierzy UPij , gdzie macierz Pij jest macierzą jednostkową n × n, w której
zamieniono wiersze i z j
I W każdym kroku metody Doolittle’a dokonujemy (co najwyżej) pojedynczej
zamiany kolumn w macierzy U, dlatego końcowy wynik, czyli macierz U0 ,
możemy przedstawić w następujący sposób
U0 = UP = UP1 P2 ...Pk ...Pn−1 Pn ,
gdzie Pk jest macierzą pojedynczej zamiany kolumn wykonanej w k-tym kroku
metody Doolittle’a
Częściowy wybór elementu głównego - metoda Crouta
I k-ty krok metody Crouta
1. Wyznaczamy k-tą kolumnę macierzy L (i > k)
`ik = aik −
k−1
X
`ip upk
i = k + 1, ..., n
p=1
2. Wyznaczamy k-ty wiersz macierzy U (j ­ k)
ukj =
akj −
k−1
X
!
`kp upj
/`kk
j = k, k + 1, ..., n
p=1
I Problemy: `kk = 0 lub |`kk | ∼ 0 (np. „śmieci numeryczne”)
I Wybór elementu głównego:
1 wyznaczamy k-tą kolumnę macierzy L
1a przed wyznaczeniem k-tego wiersza macierzy U szukamy w k-tej kolumnie
macierzy L elementu o maksymalnej wartości bezwzględnej, tzn.
max |`ik | ⇒ `imax k
i=k,...,n
1b zamieniamy w macierzy L wiersze k i imax
2 wyznaczamy k-ty wiersz macierzy U
Częściowy wybór elementu głównego - metoda Crouta
I Uzyskujemy rozkład A = L0 U, gdzie L0 jest macierzą trójkątną dolną, w której
poprzestawialiśmy wiersze
I Macierz L0 można przedstawić jako L0 = PL, gdzie L jest macierzą trójkątną
dolną, a P jest macierzą permutacji
I Rozkład macierzy A przyjmuje wtedy następującą postać
A = PLU
I Pojedynczą zamianę wierszy i i j w macierzy L można przedstawić jako iloczyn
macierzy Pij L, gdzie macierz Pij jest macierzą jednostkową n × n, w której
zamieniono kolumny i z j
I W każdym kroku metody Crouta dokonujemy (co najwyżej) pojedynczej
zamiany wierszy w macierzy L, dlatego końcowy wynik, czyli macierz L0 ,
możemy przedstawić w następujący sposób
L0 = PL = Pn Pn−1 ...Pk ...P2 P1 L,
gdzie Pk jest macierzą pojedynczej zamiany wierszy wykonanej w k-tym kroku
metody Crouta
Do zrobienia - modyfikacja programu na rozkład LU
macierzy
1. Wczytać z wejścia wymiar n macierzy A i elementy tej macierzy
2. Dokonać rozkładu LU macierzy A metodą Doolittle’a (albo Crouta)
z częściowym wyborem elementu głównego
3. Wypisać na wyjściu macierze trójkątne L, U oraz macierz
permutacji P
4. Sprawdzić, czy A = LUP (albo A = PLU)
5. Porównać wyniki programu z wynikami z gotowych procedur (np.
„lu” Matlaba)
Download