notatki

Transkrypt

notatki
Algorytmy algebry numerycznej.
Dekompozycje LU, Cholesky’ego i SVD
Maciej Drwal
[email protected]
1
Wprowadzenie
Naszym celem jest sformułowanie efektywnych algorytmicznych metod rozwiązywania układu
n równań liniowych o n niewiadomych:
Ax = b
(1)
gdzie A = [aij ], i, j = 1, 2, . . . , n, aij ∈ R.
Przypomnijmy, że układ (1) ma co najmniej jedno rozwiązanie, wtedy i tylko wtedy, gdy
rank(A) = rank([A|b]). W przypadku n równań i n niewiadomych oznacza to, że warunkiem
istnienia rozwiązania jest det A 6= 0. Jeśli niewiadomych jest mniej niż (niezależnych) równań,
wówczas układ nie ma rozwiązania. Jeśli niewiadomych jest więcej niż (niezależnych) równań,
wówczas układ ma nieskończenie wiele rozwiązań.
Reguła Cramera: xi = det(Ai )/ det(A), gdzie Ai powstaje przez zamianę i-tej kolumny
A wektorem b. W praktyce bezpośrednia implementacja tej reguły prowadzi do niestabilności
numerycznej i dużej złożoności czasowej.
Macierze trójkątne umożliwiają szybkie obliczenie wyznacznika (wymnożenie elementów na przekątnej, det(AB) = det(A) det(B)). Ponadto układ Lx = b, gdy L jest macierzą
trójkątną dolną można bardzo łatwo rozwiązać stosując następującą metodę podstawiania,
tzw. forward substitution (analogiczna istnieje dla macierzy trójkątnej górnej, backward substitution):
b1
x1 =
,
l11
b2 − l21 x1
x2 =
,
l22
..
.
Pn−1
bn − i=1 lni xi
xn =
.
lnn
Dlatego większość algorytmów dla układów równań liniowych bazuje na dekompozycji macierzy A na iloczyn macierzy trójkątnych.
1.1
Złożoność obliczeniowa
Asymptotyczne wymagania czasowe:
O(n3 ) – dekompozycja LU, Cholesky’ego, a także odpowiednio zaimplementowana reguła
Cramera
O(n2.376 ) – mnożenie macierzy (Coppersmith–Winograd), O(n2.373 ) (algorytmy o znaczeniu wyłącznie teoretycznym)
O(n2.807 ) – algorytm Strassena mnożenia macierzy (używany w praktyce)
O(n log n log log n) – mnożenie dwóch n-bitowych liczb (algorytm Schönhage-Strassena),
w praktyce używany dla liczb o powyżej 10000 cyfrach dziesiętnych; wynik poprawiony w
∗
2007 do O(n log n2O(log n) ) (algorytm Fürera)
1
1.2
Układy jednorodne
• Jeśli b = 0, wówczas x = 0 jest zawsze rozwiązaniem.
• Jeśli x1 i x2 są rozwiązaniami Ax = 0, wówczas x1 + x2 oraz λx1 (dla λ ∈ R) też są
rozwiązaniami.
• Zbiór nullspace(A) = {x ∈ Rn : Ax = 0} nazywamy jądrem (inne oznaczenie: Ker(A)
– kernel). Jest to zbiór wszystkich wektorów ortogonalnych do wierszy A.
• Jeśli x1 jest rozwiązaniem Ax = b, wówczas rozwiązaniami są wszystkie wektory {x1 +v :
v ∈ nullspace(A)}.
• Jeśli nullspace(A) = {0} oraz układ Ax = b ma rozwiązanie, wówczas to rozwiązanie
jest unikalne.
2
Dekompozycja Cholesky’ego
(a.k.a. Cholesky factorization, [1])
Każda macierz dodatnio określona A 0 może być przedstawiona jako:
A = LLT
gdzie L jest macierzą trójkątną dolną, z dodatnimi elementami na przekątnej. Interpretacja
macierzy L: “pierwiastek kwadratowy” macierzy dodatnio określonej A.
a11 AT21
A21 A22
=
l11
0
L21 L22
l11 LT21
0 LT22
stąd:
l11 =
oraz:
L21 =
=
2
l11
l11 LT21
T
l11 L21 L21 L21 + L22 LT22
√
a11
1
l11
A21 .
Z powyższego wynika również:
L22 LT22 = A22 − L21 LT21 = A22 −
1
A21 AT21 .
a11
Ostatnie wyrażenie to tzw. uzupełnienie Schura (Schur’s complement). Dla macierzy A 0
uzupełnienie to jest zawsze dodatnio określone. Stąd można rekurencyjnie zastosować algorytm dekompozycji do macierzy pomniejszonej o pierwszy wiersz i kolumnę.
2.1
Algorytm rozwiązywania układu równań
• oblicz A = LLT
• wykonaj forward substitution Lz = b
• wykonaj backward substitution LT x = z
Uwaga. Dekompozycja macierzy odwrotnej: A−1 = (LT )−1 L−1
2
Rysunek 1: Cholesky factorization.
2.2
Dekompozycja Cholesky’ego dla macierzy rzadkich
Macierz permutacji P powstaje poprzez zmianę miejscami wierszy macierzy I.
Rozwiązywanie układu równań dla macierzy permutacji: P x = b, wynik: x = P T b.
Wykonujemy dekompozycję: P T AP = LLT .
3
Dekompozycja LU
Dla macierzy kwadratowej A ∈ Rn×n nieosobliwej (det A 6= 0) dekompozycja LU jest zdefiniowana jako:
P A = LU
gdzie:
P jest macierzą permutacji n×n (uzyskana z macierzy jednostkowej poprzez odpowiednią
zamianę wierszy),
L jest macierzą trójkątną dolną ze wszystkimi elementami na przekątnej równymi 1,
U jest macierzą trójkątną górną.
Wyznaczanie dekompozycji: algorytm eliminacji Gaussa (partial row pivoting)
Rozwinięcie tego algorytmu umożliwia obliczenie macierzy A−1 (algorytm GaussaJordana).
4
Rozkład według wartości osobliwych
(a.k.a. singular value decomposition (SVD))
Definicja 1: Dla macierzy zespolonej U macierz transponowaną sprzężoną (conjugate
transpose) oznaczamy U ∗ .
Definicja 2: Macierz unitarna: U ∗ U = U U ∗ = I.
Dowolną macierz A wymiaru m × n, gdzie aij ∈ C (R) można przedstawić jako:
A = U ΣV ∗
gdzie:
Σ = [σi ] jest diagonalną (prostokątną!) macierzą m × n, zawierającą wartości osobliwe
macierzy A (pierwiastki wartości własnych),
U jest macierzą unitarną wymiaru m × m, zawierającą lewostronne wektory osobliwe ui
odpowiadające wartościom własnym σi (Avi = σi ui ),
3
Rysunek 2: Gaussian Elimination with partial row pivoting.
V ∗ jest macierzą unitarną wymiaru n × n, zawierającą prawostronne wektory osobliwe vi
odpowiadające wartościom własnym σi (A∗ ui = σi vi ).
Definicja 3: Uogólniona macierz odwrotna, ozn. A+ (Moore-Penrose pseudoinverse).
Spełnia ona szereg warunków, m.in. A+ = A−1 jeśli A posiada macierz odwrotną.
Przy pomocy SVD można łatwo obliczyć uogólnioną macierz odwrotną, w następujący
sposób:
A+ = V Σ + U ∗
czyli wystarczy wziąć wartości 1/σi .
Macierz A+ spełnia następującą własność: dla układu równań Ax = b, gdzie A jest
macierzą m × n,
∀x ||Ax − b||2 ≥ ||Az − b||2
gdzie z = A+ b.
Więc wektor z jest rozwiązaniem problemu najmniejszych kwadratów: min ||Ax − b||2 .
Uwaga: Jeśli układ równań Ax = b (A jest macierzą m×n) ma jakiekolwiek rozwiązania,
wówczas dane są one jako:
x = A+ b + I − A+ A w
dla dowolnego wektora w ∈ Rn . Rozwiązania istnieją gdy AA+ b = b.
Literatura
[1] Vandenberghe L. Applied Numerical Computing (lecture). http://www.ee.ucla.edu/
~vandenbe/ee103.html.
4