Metody numeryczne - laboratoria 7 (Rozwiązywanie układów równań liniowych - metody dokładne)
Problem - rozwiązać układ równań
Układ zapisany w postaci macierzowej:
Ax = b
Proste warianty - z macierzą trójkątna dolną i trójkątną górną
z macierzą trójkątną dolną
x1=b1/l11
xi=(bi-
)/lii i = 2…n
z macierzą trójkątną górną
xn=bn/unn
xi=(bi-
)/uii i = n-1…1
Koszt obliczenia wartości xi - kwadratowy (O(n2))
Metoda eliminacji Gaussa - zalgorytmizowana typowa metoda rozwiązywania równań liniowych za pomocą dodawania i odejmowania równań, oraz mnożenia równań przez pewną stałą.
li1 = ai1/a11, a11 ≠ 0
li2 = ai2/a22, a22 ≠ 0
Algorytm:
Dla k = 1…n-1
Dla i = k + 1 …n
lik = aik(k)/akk(k), aij(k+1)=aij(k) - likakj(k) dla j = k…n
bi(k+1) = bi(k) - likbk(k)
Złożoność algorytmu rzędu n3 (O(n3))
Otrzymujemy macierz trójkątną górną - którą rozwiązujemy z wykorzystaniem wcześniej przedstawionych metod.
Rozkład LU macierzy
Każdy krok rozkładu Gaussa można przedstawić jako iloczyn macierzy:
A(k+1) = L(k) A(k)
U = A(n) = L(n-1)A(n-1) = L(n-1)…L(1) A, stąd
A = (L(1))-1…(L(n-1))-1U
(odwracanie macierzy L(i) - zmienia się tylko znak elementów lij na przeciwny)
L = (L(1))-1…(L(n-1))-1U
A = LU
Wtedy rozwiązanie układu równań można wykonać:
LUx = b ->
Ly = b i Ux = y
(oczywiście L - jest trójkątna dolna, U - trójkątna górna)
W przypadku, gdy w przypadku serii równań zmienia się tylko wektor b, warto używać rozkładu LU - bo po pojedynczym wykonaniu rozkładu za każdym razem mamy tylko do rozwiązania 2 razy macierz trójkątną (złożoność kwadratowa).
Wybór elementu głównego
Eliminacja Gaussa w najprostszym wariancie nie zawsze działa - przykład - macierz:
a11 = 0 (dzielenie przez 0!)
poza tym - nie zawsze najlepsze własności numeryczne, zwykle zależy nam na tym by dzielić przez największą co do modułu liczbę.
wybór częściowy elementu głównego
W każdym kroku algorytmu wyszukujemy element największy (co do modułu) w aktualnie przetwarzanej kolumnie (kolumnie k - dla ustalenia uwagi, w zasadzie tylko w dół od elementu akk włącznie):
i zamieniamy wierszy k i p w macierzy A, oraz w wektorze b
(odpowiada to zmianie kolejności równań w układzie równań)
pełny wybór elementu głównego
Różni się od wyboru częściowego tym, że elementu poszukujemy we fragmencie macierzy w dół i prawo od elementu akk włącznie.
W przypadku tego rodzaju wyboru zmieniamy również kolejność kolumn w macierzy A. W takim przypadku zmienia się również kolejność zmiennych w wektorze x (trzeba te zmiany zapamiętywać w trakcie obliczeń).
Zadanie 1 - wygenerowanie przykładów do testowanie rozkładu Gaussa:
- stworzenie pewnej macierzy A oraz wektora x i wygenerowanie za pomocą odpowiedniej procedury mnożenia - wektora b.
Zadanie 2 - użycie wygenerowanych przykładów do rozwiązania układu równań (zastosowanie wyboru częściowego i rozwiązania macierzy trójkątnej górnej).