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