1. Pierwszy etap eliminacji Gaussa
Chcemy sprowadzić macierz kwadratową do macierzy trójkątnej.
Mamy Ax=b, gdzie
- A∈Rn×n
- x∈Rn
- b∈Rn
- det(A)=0
Znakiem (k) oznaczamy k-ty krok. Wówczas oczywiście A(1)=A,b(1)=b.
A(1)x=b(1):a11(1)x1a21(1)x1⋮an1(1)x1+++a12(1)x2a22(1)x2⋮an2(1)x2+++⋯⋯⋯+++a1n(1)xna2n(1)xn⋮ann(1)xn===b1(1)b2(1)⋮bn(1)
Eliminujemy zmienną x1 z równań od 2-go do n-tego. Mnożymy 1-sze równanie przez li1=a11(1)ai1(1),i=2,…,n i odejmujemy od pozostałych.
Po pierwszym kroku mamy A(2)x=b(2)a11(1)x1+a12(1)x2a22(2)x2⋮an2(2)x2+++………++⋮+a1n(1)xna2n(2)xnann(2)xn==⋮=b1(1)b2(2)bn(2)
Eliminujemy zmienną x2 z równań od 3-go do n-tego. Mnożymy 2-gie równanie przez li2=222(2)ai2(2),i=3,…,n i odejmujemy od pozostałych.
Ogólnie po k−1 krokach otrzymujemy A(k)x=b(k)a11(1)x1+a12(1)x2a22(2)x2++⋱……akk(k)xk⋮ank(k)xk+++⋯++⋯+a1n(1)xna2n(2)xn⋮akn(k)xn⋮ann(k)xn====b1(1)b2(2)⋮bk(k)⋮bn(k)
Eliminujemy zmienną xk z równań od (k+1)–tego do n-tego. Mnożymy k-te równanie przez lik=akk(k)aik(k),i=(k+1),…,n i odejmujemy od pozostałych.
Po n−1 krokach dostajemy układ z macierzą górno-trójkątną: A(n)x=b(n)a11(1)x1+a12(1)x2a22(2)x2++……⋱++a1n(1)xna2n(2)xn⋮ann(n)xn===b1(1)b2(2)⋮bn(n)
1.1. Pseudokod
for
k←1 to
(n−1):
for
i←(k+1) to
n:
- lik←akk(k)aik(k)
for
j←(k+1) to
n:
- aij(k+1)←aij(k)−likakj(k)
- bi(k+1)←bi(k)−likbk(k)
Przejście od macierzy A(k) do A(k+1) i od wektora b(k) do b(k+1) możemy zapisać A(k+1)=L(k)A(k),b(k+1)=L(k)b(k), gdzie L(k)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1⋱1−lk+1,k−lk+2,k⋮−ln,k1⋱1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
1.3. Kroki
Proces sprowadzania macierzy A(1) do macierzy górno-trójkątnej A(n) w (n−1) krokach możemy zapisać A(n)=L(n−1)…L(2)L(1)A(1).
Oznaczając A(n) przez U oraz z tego, że A=A(1) mamy UAA=L(n−1)…L(2)L(1)A=(L(n−1)…L(2)L(1))−1U=L(1)−1L(2)−1…L(n−1)−1U
1.4. Rozkład LU
L(k)−1=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1⋱1lk+1,klk+2,k⋮ln,k1⋱1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤L=⎣⎢⎢⎢⎢⎢⎢⎡1l21l31⋮ln11l32ln21⋯⋱ln,n−11⎦⎥⎥⎥⎥⎥⎥⎤ gdzie L=L(1)−1L(2)−1…L(n−1)−1.
Jak widać elminacja Gaussa jest równoważna rozkładowi macierzy A na iloczyn A=LU macierzy dolnej i górno-trójkątnej.
W komputerowej realizacji, rozkład LU pamiętamy w jednej tablicy umieszczając mnożniki lik(k) w miejscu zerowanych elementów aik(k). $$ A =
LU =
$$
Znając rozkład A=LU zadanie Ax=b sprowadzamy do rozwiązania dwóch układów trójkątnych Ly=bUx=y
Rozwiązanie układu Ly=b odpowiada y=L−1b=L(n−1)⋯L(2)L(1)b=b(n).
1.5. Obliczanie wyznacznika
Załóżmy, że znamy rozkład Uu macierzy A wówczas det(A)=det(LU)=det(L)⋅det(U)=i=1∏nuii.
1.6. Obliczanie macierzy odwrotnej
Z definicji A−1 jest macierzą odwrotną do A, jeżeli AA−1=I.
Oznaczając A−1 przez X mamy AX=I⟺A[x(1),…,x(n)]=[e(1),…,e(n)],x(i),e(i)∈Rn gdzie x(i) jest i-tą kolumną macierzy odwrotnej, e(i) jest i-tą kolumną macierzy jednostkowej.
Znając rozkład LU macierzy A wyznaczamy n kolumn macierzy A(−1) co jest równoważne rozwiązaniu 2n układów trójkątnych LUx(i)Ly(i)=e(i),Ux(i)=e(i),i=1,…,n=y(i),i=1,…,n
1.7. Wybór elementu głównego
Wariant podstawowy metody eliminacji Gaussa może być stosowany jeżeli wszystkie elementy przekątniowe akk(k),k=1,2,…,(n−1) są różne od zera. Warunek ten nie jest spełniony nawet dla macierzy nieosobliwych, jak na przykład [0111][x1x2]=[12]
W takim przypadku wystarczy zamienić równania miejscami. Należy podkreślić, że w numerycznej realizacji ważne jest nie tylko, aby elementy akk(k) były różne od zera, ale by nie były zbyt małę co do wartości bezwzględnej.
1.7.1. Przykład
Rozważmy układ równań [ϵ111][x1x2]=[12] gdzie ϵ jest małą liczbą.
Po zastosowaniu eliminacji Gaussa otrzymujemy układ trójkątny [ϵ011−ϵ−1][x1x2]=[12−ϵ−1].
Rozwiązując otrzymujemy x2=1−ϵ−12−ϵ−1x1=(1−x2)⋅ϵ−1
Jeżeli ϵ jest wystarczająca małe np. ϵ=10−8 w arytmetyce single
, wówczas 2−ϵ−1≈ϵ−1 oraz 1−ϵ−1≈ϵ−1.
Stąd obliczone x2≈1 i x1≈0 znacznie różnią się od prawidłowych wartości x2≈1 i x1≈1.
Problem znika jeżeli zamienimy kolejność równań: [1ϵ11][x1x2]=[21].
Stosując eliminację Gaussa dostajemy układ trójkątny [1011−ϵ][x1x2]=[21−2ϵ].
Rozwiązując układ otrzymujemy prawidłowe wyniki: x2=1−ϵ1−2ϵ≈1,x1=2−x2≈1.
1.7.2. Modyfikacja eliminacji Gaussa
Rozważmy, k-ty krok eliminacji Gaussa.
eliminacja Gaussa z częściowym wyborem polega na znalezieniu elementu takiego, że ∣∣∣∣apk(k)∣∣∣∣=k≤i≤nmax∣∣∣∣aik(k)∣∣∣∣ i przestawieniu w macierzy A(k) wiersza p-tego z k-tym oraz elementu p-tego z k-tym w wektorze b(k).
eliminacja Gaussa z pełnym wyborem polega na znalezieniu elementu takie, że ∣∣∣∣apl(k)∣∣∣∣=k≤i,j≤nmax∣∣∣∣aij(k)∣∣∣∣ i przestawieniu w macierzy A(k) wiersza p-tego z k-tym, kolumny l-tej z k-tą oraz elementu p-tego z k-tym w wektorze b(k).
Niech Pij będzie macierzą permutacji Pij=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1⋱0⋮1⋯⋯1⋮0⋱1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
Czyli Pij różni się od I elementami pii=pjj=0 oraz pij=pji=1.
Ponadto PijT=Pij=Pij−1,Pij2=I.
PijA jest równoważne zamianie w macierzy A wiersza i-tego z j-tym.
APij jest równoważne zamianie w macierzy A kolumny i-tej z j-tą.
W zapisie macierzowym częściowy wybór ma postać PpkA(k),Ppkb(k), natomiast pełny wybór ma postać PpkA(k)Pkl,Ppkb(k).
Zatem, metodę eliminacji Gaussa z pełnym wyborem możemy przedstawić L(n−1)Ppn−1n−1…L(2)Pp22L(1)Pp11A(1)P1j1P2j2…Pn−1,jn−1L(n−1)Ppn−1n−1…L(2)Pp22L(1)Pp11P−1PA(1)P=A(n)=A(n) gdzie
- P=Ppn−1n−1…Pp22Pp11
- P=P1j1P2j2…Pn−1jn−1
L=(L(n−1)Ppn−1n−1…L(2)Pp22L(1)Pp22…Ppn−1n−1)−1 jest macierzą dolno trójkątną spełniającą równanie LU=PAP gdzie U=A(n).
W przypadku częściowego wyboru mamy po prostu P=I.
Zatem LU=PA.
Znany rozkład LU=PA możemy wykorzystać do rozwiązania układu równań Ax=b Ly=Pb,Ux=y.
Wyznacznik macierzy obliczamy następująco: det(A)=(−1)pi=1∏nuii gdzie p jest liczbą przestawień kolumn i wierszy.
2. Drugi etap eliminacji Gaussa
Mamy Ux=b, gdzie
- U∈Rn×n
- x∈Rn
- b∈Rn
Czyli: u11x1+u12x2u22x2++⋱⋯⋯+u1nxn+u2nxn⋮unnxn===b1b2⋮bn (idziemy od dołu do góry stopniowo, jeden po drugim, wyznaczając kolejne zmienne)
Zakładamy, że macierz U jest nieosobliwa (det(U)=0) stąd ukk=0 dla k=1,…,n. Wyznaczamy xn z ostatniego równania xn=unnbn
Dalej wyznaczamy xk dla k=(n−1),…,1 xk=ukkbk−∑j=k+1nukjxj