Lista nr 5

Transkrypt

Lista nr 5
Obliczenia naukowe – Paweł Zieliński
1
Obliczenia naukowe
Lista nr 5 (laboratorium)
Jednostka badawcza dużej firmy działającej w branży chemicznej prowadzi intensywne badania.
Wynikiem tych badań są modele pewnych zjawisk chemii kwantowej. Rozwiązanie tych modeli, w
pewnym szczególnym przypadku, sprowadza się do rozwiązania układu równań liniowych
Ax = b .
dla danej macierzy współczynników A ∈ Rn×n i wektora prawych stron b ∈ Rn . Macierz A jest rzadką,
tj. mającą dużą elementów zerowych, i blokową o następującej strukturze:


A1 C 1 0
0
0
···
0
 B 2 A2 C 2
0
0
···
0 


 0 B 3 A3
C
0
·
·
·
0 
3




..
..
..
..
..
..
A =  ...
(1)
,
.
.
.
.
.
.


 0 · · · 0 B v−2 A v−2 C v−2

0 

 0 ··· 0
0
B v−1 A v−1 C v−1 
0 ··· 0
0
0
Bv
Av
v = n/ℓ, zakładając, że n jest podzielne przez ℓ, gdzie ℓ jest rozmiarem wszystkich kwadratowych
macierzy wewnętrznych (bloków): A k , B k i C k . Mianowicie, A k ∈ Rℓ×ℓ , k = 1, . . . , v jest macierzą
gęstą, 0 jest kwadratową macierzą zerową stopnia ℓ, macierz B k ∈ Rℓ×ℓ , k = 2, . . . , v jest następującej
postaci:


0 · · · 0 bk1
 0 · · · 0 bk2 


Bk =  .
.. ..  ,
 ..
. . 
0 · · · 0 bkℓ
B k ma tylko jedną, ostatnią, kolumnę niezerową. Natomiast C k ∈ Rℓ×ℓ , k = 1, . . . , v − 1 jest macierzą
diagonalną:
 k

0
0
···
0
c1
 0 ck2
0
···
0 


 .. . .
..  .
..
..
Ck =  .

.
.
.
.


 0 ···
0 ckℓ−1 0 
0 ···
0
0
ckℓ
Firma napotkała problem z efektywnym rozwiązaniem problemu Ax = b , gdzie A jest postaci (1). Chodzi przede wszystkim o wymagania czasowe i pamięciowe, które wynikają z bardzo dużego rozmiaru
macierzy (n jest bardzo duże). W konsekwencji wyklucza to pamiętanie macierzy A jako tablicę n × n
oraz użycie standardowych (bibliotecznych) algorytmów dla macierzy gęstych (tj. takich, gdzie nie zakłada się dużej liczby elementów zerowych). Zatem jedynym podejściem do rozwiązania tego problemu
jest specjalna struktura pamiętająca efektywnie macierz A , która pamięta tylko elementy niezerowe
i adaptacja standardowych algorytmów tak, aby uwzględniały postać macierzy (1), tj. jej rzadkość,
regularność występowania elementów zerowych i niezerowych (jeżeli ℓ jest stałą, to czas O(n3 ) można
zredukować do O(n))
1. Napisać funkcję rozwiązującą układ Ax = b metodą eliminacji Gaussa uwzględniającą specyficzną postać (1) macierzy A dla dwóch wariantów:
(a) bez wyboru elementu głównego,
(b) z częściowym wyborem elementu głównego.
Obliczenia naukowe – Paweł Zieliński
2
2. Napisać funkcję wyznaczającą rozkład LU macierzy A metodą eliminacji Gaussa uwzględniającą
specyficzną postać (1) macierzy A dla dwóch wariantów:
(a) bez wyboru elementu głównego,
(b) z częściowym wyborem elementu głównego.
Rozkład LU musi być efektywne pamiętany!
3. Napisać funkcję rozwiązującą układ równań Ax = b (uwzględniającą specyficzną postać (1)
macierzy A ) jeśli wcześniej został już wyznaczony rozkład LU przez funkcję z punktu 2.
Powyższe funkcje powinny być zaprogramowane w języku Julia umieszczone w module o nazwie
blocksys. Aby efektywnie pamiętać macierze rzadkie należy się zapoznać z rozdziałem o Sparse Matrices (zob. [1]). Niewolno używać x=A\b i lufact.
Wymagania dotyczące programów:
Programy powinny umożliwiać
• czytanie danej macierzy A i wektora prawych stron b z plików tekstowych, których format jest
następujący (przykładowe dane umieszczone są na stronie kursu), dla macierzy A , gdzie zadane
są tylko elementy niezerowe:
n l
i1 j1
i2 j2
i3 j3
...
...
EOF
<--- rozmiar macierzy
A, rozmiar macierzy Ak, Bk, Ck
A[i1,j1] <--- indeksy i1,j1 i niezerowy element a[i1,j1] macierzy A
A[i2,j2] <--- indeksy i2,j2 i niezerowy element a[i2,j2] macierzy A
A[i3,j3] <--- indeksy i3,j3 i niezerowy element a[i3,j3] macierzy A
dla wektora prawych stron b :
n
b[1]
b[2]
...
...
b[n]
<--- rozmiar wektora b
<--- skladowa nr 1 wektora b
<--- skladowa nr 2 wektora b
<--- skladowa nr n wektora b
• czytanie danej macierzy A z pliku tekstowego (format opisany wyżej) oraz obliczanie wektora
prawych stron b na podstawie wektora x (jak na liście nr 2), tj. b = Ax, gdzie x = (1, . . . , 1)T .
Mnożenie macierzy przez wektor, Ax powinno uwzględniać postać (1) (macierz jest rzadka),
x do pliku tekstowego, jeśli macierz A i wektor prawych
• drukowanie obliczonego rozwiązania x̂
stron b były czytane z plików,
x[1] <--- skladowa nr 1 wektora x
x[2] <--- skladowa nr 2 wektora x
...
...
x[n] <--- skladowa nr n wektora x
x do pliku tekstowego, jeśli macierz A była czytana z pliku
• drukowanie obliczonego rozwiązania x̂
a wektor prawych stron b był obliczany
Obliczenia naukowe – Paweł Zieliński
blad
x[1]
x[2]
...
...
x[n]
3
<--- blad wzgledny
<--- skladowa nr 1 wektora x
<--- skladowa nr 2 wektora x
<--- skladowa nr n wektora x
• testowanie rozwiązywania Ax = b (funkcja z punktu 1 w dwóch wariantach wyboru elementu
głównego),
• testowanie rozwiązywania Ax = b dwuetapowo (funkcja z punktu 2 w dwóch wariantach wyboru
elementu głównego i funkcja z punktu 3), tj. A = LU (funkcja z punktu 2 w dwóch wariantach
wyboru elementu głównego), następnie LU x = b (funkcja z punktu 3).
Dane testowe
Przykład danych testowych znajduje się na stronie kursu (macierze są dobrze uwarunkowane). Macierze A o postaci (1) zapisywanej do pliku tekstowego, zgodnego z formatem opisanym wyżej, można
generować za pomocą funkcji blockmat z modułu matrixgen.jl umieszczonego na stronie kursu.
Wyniki eksperymentów
Wyniki przedstawić w sprawozdaniu, plik pdf + wydruk, które powinno zawierać:
1. opis algorytmów - opis implementacji z analizą złożoności,
2. wyniki eksperymentów porównujących zaimplementowane algorytmy dla danych testowych (tabele, wykresy) oraz ich interpretację.
3. wnioski.
Do sprawozdania należy dołączyć pliki z kodem (*.jl). Pliki powinny być skomentowane: imię i
nazwisko autora (anonimy nie będą sprawdzane), komentarze zmiennych, Spakowane pliki wraz
ze sprawozdaniem (*.zip) należy przesłać e-mailem prowadzącemu. Natomiast wydruk sprawozdania
należy oddać prowadzącemu na laboratorium.
Uwaga: Ostateczną wersję proszę programów przekompilować i przetestować pod linuksem.
Na ocenę co najwyżej dobrą nie trzeba implementować punktu 2 i punktu 3 oraz testowania
dwuetapowego.
Literatura
[1] J. Bezanson, S. Karpinski, V. Shah, A. Edelman, et al., Julia Language Documentation
[2] A. Kiełbasiński, H. Schwetlick, Numeryczna algebra liniowa. Wprowadzenie do obliczeń zautomatyzowanych, wyd. 2, WNT, Warszawa 1994.