Rozwiązywanie układu równań liniowych

by Jerry Sky

2020-12-01



1. Pierwszy etap eliminacji Gaussa

Chcemy sprowadzić macierz kwadratową do macierzy trójkątnej.

Mamy Ax=bAx = b, gdzie

Znakiem (k)^{(k)} oznaczamy kk-ty krok. Wówczas oczywiście A(1)=A,b(1)=bA^{(1)} = A,\enspace b^{(1)} = b.

A(1)x=b(1):a11(1)x1+a12(1)x2+⋯+a1n(1)xn=b1(1)a21(1)x1+a22(1)x2+⋯+a2n(1)xn=b2(1)⋮⋮⋮⋮an1(1)x1+an2(1)x2+⋯+ann(1)xn=bn(1) A^{(1)} x = b^{(1)}: \quad \begin{matrix} a^{(1)}_{11} x_1 &+ &a^{(1)}_{12} x_2 &+ &\dotsb &+ &a^{(1)}_{1n} x_n &= &b^{(1)}_1\\ a^{(1)}_{21} x_1 &+ &a^{(1)}_{22} x_2 &+ &\dotsb &+ &a^{(1)}_{2n} x_n &= &b^{(1)}_2\\ \vdots && \vdots &&&& \vdots && \vdots\\ a^{(1)}_{n1} x_1 &+ &a^{(1)}_{n2} x_2 &+ &\dotsb &+ &a^{(1)}_{nn} x_n &= &b^{(1)}_n\\ \end{matrix}

Eliminujemy zmienną x1x_1 z równań od 22-go do nn-tego. Mnożymy 11-sze równanie przez li1=ai1(1)a11(1),i=2,…,n l_{i1} = \frac{a^{(1)}_{i1}}{a^{(1)}_{11}},\quad i = 2,\dots,n i odejmujemy od pozostałych.

Po pierwszym kroku mamy A(2)x=b(2)a11(1)x1+a12(1)x2+…+a1n(1)xn=b1(1)a22(2)x2+…+a2n(2)xn=b2(2)⋮⋮⋮an2(2)x2+…+ann(2)xn=bn(2) A^{(2)}x = b^{(2)} \quad \begin{matrix} a_{11}^{(1)} x_1 &+ & a_{12}^{(1)} x_2 &+ &\dots &+ &a_{1n}^{(1)} x_n &= &b_1^{(1)}\\ && a_{22}^{(2)} x_2 &+ &\dots &+ &a_{2n}^{(2)} x_n &= &b_2^{(2)}\\ &&\vdots &&& \vdots && \vdots\\ && a_{n2}^{(2)} x_2 &+ &\dots &+ &a_{nn}^{(2)} x_n &= &b_n^{(2)}\\ \end{matrix}

Eliminujemy zmienną x2x_2 z równań od 33-go do nn-tego. Mnożymy 22-gie równanie przez li2=ai2(2)222(2),i=3,…,n l_{i2} = \frac{a_{i2}^{(2)}}{2_{22}^{(2)}}, \enspace i = 3,\dots,n i odejmujemy od pozostałych.

Ogólnie po k−1k-1 krokach otrzymujemy A(k)x=b(k)a11(1)x1+a12(1)x2+…+a1n(1)xn=b1(1)a22(2)x2+…+a2n(2)xn=b2(2)⋱⋮⋮akk(k)xk+⋯+akn(k)xn=bk(k)⋮⋮⋮ank(k)xk+⋯+ann(k)xn=bn(k) A^{(k)} x = b^{(k)} \quad \begin{matrix} a_{11}^{(1)} x_1 &+ & a_{12}^{(1)} x_2 &+ &\dots &+ &a_{1n}^{(1)} x_n &= &b_1^{(1)}\\ && a_{22}^{(2)} x_2 &+ &\dots &+ &a_{2n}^{(2)} x_n &= &b_2^{(2)}\\ &&& \ddots &&& \vdots && \vdots\\ &&&&a_{kk}^{(k)} x_k &+ \dots + &a_{kn}^{(k)} x_n &= &b_k^{(k)}\\ &&&&\vdots && \vdots && \vdots\\ &&&& a_{nk}^{(k)} x_k &+ \dots + &a_{nn}^{(k)} x_n &= &b_n^{(k)}\\ \end{matrix}

Eliminujemy zmienną xkx_k z równań od (k+1)(k+1)–tego do nn-tego. Mnożymy kk-te równanie przez lik=aik(k)akk(k),i=(k+1),…,n l_{ik} = \frac{a_{ik}^{(k)}}{a_{kk}^{(k)}}, \enspace i = (k+1),\dots,n i odejmujemy od pozostałych.


Po n−1n-1 krokach dostajemy układ z macierzą górno-trójkątną: A(n)x=b(n)a11(1)x1+a12(1)x2+…+a1n(1)xn=b1(1)a22(2)x2+…+a2n(2)xn=b2(2)⋱⋮⋮ann(n)xn=bn(n) A^{(n)} x = b^{(n)} \quad \begin{matrix} a_{11}^{(1)} x_1 &+ & a_{12}^{(1)} x_2 &+ &\dots &+ &a_{1n}^{(1)} x_n &= &b_1^{(1)}\\ && a_{22}^{(2)} x_2 &+ &\dots &+ &a_{2n}^{(2)} x_n &= &b_2^{(2)}\\ &&&& \ddots && \vdots && \vdots\\ &&&&&&a_{nn}^{(n)} x_n &= &b_n^{(n)}\\ \end{matrix}

1.1. Pseudokod

  1. for k←1k \gets 1 to (n−1)(n-1):
    1. for i←(k+1)i \gets (k+1) to nn:
      1. lik←aik(k)akk(k)l_{ik} \gets \frac{a_{ik}^{(k)}}{a_{kk}^{(k)}}
      2. for j←(k+1)j \gets (k+1) to nn:
        1. aij(k+1)←aij(k)−likakj(k)a_{ij}^{(k+1)} \gets a_{ij}^{(k)} - l_{ik} a_{kj}^{(k)}
      3. bi(k+1)←bi(k)−likbk(k)b_i^{(k+1)} \gets b_i^{(k)} - l_{ik} b^{(k)}_k

1.2. Macierzowe sformułowanie jednego kroku

Przejście od macierzy A(k)A^{(k)} do A(k+1)A^{(k+1)} i od wektora b(k)b^{(k)} do b(k+1)b^{(k+1)} możemy zapisać A(k+1)=L(k)A(k),b(k+1)=L(k)b(k), A^{(k+1)} = L^{(k)}A^{(k)}, \quad b^{(k+1)} = L^{(k)}b^{(k)}, gdzie L(k)=[1⋱1−lk+1,k1−lk+2,k⋮⋱−ln,k1] L^{(k)} = \begin{bmatrix} 1\\ & \ddots\\ &&& 1\\ &&& -l_{k+1,k} & 1\\ &&& -l_{k+2,k}\\ &&& \vdots &&&\ddots\\ &&& -l_{n,k} &&&& 1 \end{bmatrix}

1.3. Kroki

Proces sprowadzania macierzy A(1)A^{(1)} do macierzy górno-trójkątnej A(n)A^{(n)} w (n−1)(n-1) krokach możemy zapisać A(n)=L(n−1)…L(2)L(1)A(1). A^{(n)} = L^{(n-1)} \dots L^{(2)} L^{(1)} A^{(1)}.

Oznaczając A(n)A^{(n)} przez UU oraz z tego, że A=A(1)A = A^{(1)} mamy U=L(n−1)…L(2)L(1)AA=(L(n−1)…L(2)L(1))−1UA=L(1)−1L(2)−1…L(n−1)−1U \begin{aligned} U &= L^{(n-1)} \dots L^{(2)} L^{(1)} A\\ A &= \left( L^{(n-1)} \dots L^{(2)} L^{(1)} \right)^{-1} U\\ A &= L^{(1)^{-1}} L^{(2)^{-1}} \dots L^{(n-1)^{-1}} U \end{aligned}

1.4. Rozkład LULU

L(k)−1=[1⋱1lk+1,k1lk+2,k⋮⋱ln,k1]L=[1l211l31l321⋮⋱ln1ln2⋯ln,n−11] L^{(k)^{-1}}= \begin{bmatrix} 1\\ &\ddots\\ &&& 1\\ &&& l_{k+1,k} & 1\\ &&& l_{k+2,k}\\ &&& \vdots &&& \ddots\\ &&& l_{n,k} &&&& 1 \end{bmatrix} \quad L = \begin{bmatrix} 1\\ l_{21} & 1\\ l_{31} & l_{32} & 1\\ \vdots &&&& \ddots\\ l_{n1} & l_{n2} & \dotsb && l_{n,n-1} & 1 \end{bmatrix} gdzie L=L(1)−1L(2)−1…L(n−1)−1L = L^{(1)^{-1}} L^{(2)^{-1}} \dots L^{(n-1)^{-1}}.

Jak widać elminacja Gaussa jest równoważna rozkładowi macierzy AA na iloczyn A=LUA = LU macierzy dolnej i górno-trójkątnej.

W komputerowej realizacji, rozkład LULU pamiętamy w jednej tablicy umieszczając mnożniki lik(k)l^{(k)}_{ik} w miejscu zerowanych elementów aik(k)a_{ik}^{(k)}. $$ A = LU =

$$

Znając rozkład A=LUA = LU zadanie Ax=bAx = b sprowadzamy do rozwiązania dwóch układów trójkątnych Ly=bUx=y Ly = b \qquad Ux = y

Rozwiązanie układu Ly=bLy = b odpowiada y=L−1b=L(n−1)⋯L(2)L(1)b=b(n). y = L^{-1} b = L^{(n-1)} \dotsb L^{(2)} L^{(1)} b = b^{(n)}.


1.5. Obliczanie wyznacznika

Załóżmy, że znamy rozkład UuUu macierzy AA wówczas det⁡(A)=det⁡(LU)=det⁡(L)⋅det⁡(U)=∏i=1nuii. \det(A) = \det(LU) = \det(L) \cdot \det(U) = \prod_{i=1}^n u_{ii}.


1.6. Obliczanie macierzy odwrotnej

Z definicji A−1A^{-1} jest macierzą odwrotną do AA, jeżeli AA−1=I. AA^{-1} = I.

Oznaczając A−1A^{-1} przez XX mamy AX=I  ⟺  A[x(1),…,x(n)]=[e(1),…,e(n)],x(i),e(i)∈Rn AX = I \iff A\left[x^{(1)},\dots,x^{(n)}\right] = \left[e^{(1)}, \dots, e^{(n)}\right],\quad x^{(i)}, e^{(i)} \in \mathbb{R}^n gdzie x(i)x^{(i)} jest ii-tą kolumną macierzy odwrotnej, e(i)e^{(i)} jest ii-tą kolumną macierzy jednostkowej.

Znając rozkład LULU macierzy AA wyznaczamy nn kolumn macierzy A(−1)A^{(-1)} co jest równoważne rozwiązaniu 2n2n układów trójkątnych LUx(i)=e(i),i=1,…,nLy(i)=e(i),Ux(i)=y(i),i=1,…,n \begin{aligned} LU x^{(i)} &= e^{(i)}, \quad i = 1, \dots, n\\ Ly^{(i)} = e^{(i)}, \enspace Ux^{(i)} &= y^{(i)}, \quad i = 1, \dots, n\\ \end{aligned}


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)a_{kk}^{(k)}, \enspace k = 1,2,\dots,(n-1) są różne od zera. Warunek ten nie jest spełniony nawet dla macierzy nieosobliwych, jak na przykład [0111][x1x2]=[12] \begin{bmatrix} 0 & 1\\ 1 & 1\\ \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \end{bmatrix} = \begin{bmatrix} 1\\ 2\\ \end{bmatrix}

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)a^{(k)}_{kk} 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] \begin{bmatrix} \epsilon & 1\\ 1 & 1\\ \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \end{bmatrix} = \begin{bmatrix} 1\\ 2\\ \end{bmatrix} gdzie ϵ\epsilon jest małą liczbą.

Po zastosowaniu eliminacji Gaussa otrzymujemy układ trójkątny [ϵ101−ϵ−1][x1x2]=[12−ϵ−1]. \begin{bmatrix} \epsilon & 1\\ 0 & 1 - \epsilon^{-1}\\ \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \end{bmatrix} = \begin{bmatrix} 1\\ 2 - \epsilon^{-1}\\ \end{bmatrix}.

Rozwiązując otrzymujemy x2=2−ϵ−11−ϵ−1x1=(1−x2)⋅ϵ−1 x_2 = \frac{2 - \epsilon^{-1}}{1 - \epsilon^{-1}} \\[10pt] x_1 = (1 - x_2) \cdot \epsilon^{-1}

Jeżeli ϵ\epsilon jest wystarczająca małe np. ϵ=10−8\epsilon = 10^{-8} w arytmetyce single, wówczas 2−ϵ−1≈ϵ−12 - \epsilon^{-1} \approx \epsilon^{-1} oraz 1−ϵ−1≈ϵ−11 - \epsilon^{-1} \approx \epsilon^{-1}.

Stąd obliczone x2≈1x_2 \approx 1 i x1≈0x_1 \approx 0 znacznie różnią się od prawidłowych wartości x2≈1x_2 \approx 1 i x1≈1x_1 \approx 1.

Problem znika jeżeli zamienimy kolejność równań: [11ϵ1][x1x2]=[21]. \begin{bmatrix} 1 & 1\\ \epsilon & 1\\ \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \end{bmatrix} = \begin{bmatrix} 2\\ 1\\ \end{bmatrix}.

Stosując eliminację Gaussa dostajemy układ trójkątny [1101−ϵ][x1x2]=[21−2ϵ]. \begin{bmatrix} 1 & 1\\ 0 & 1 - \epsilon\\ \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \end{bmatrix} = \begin{bmatrix} 2\\ 1 - 2\epsilon\\ \end{bmatrix}.

Rozwiązując układ otrzymujemy prawidłowe wyniki: x2=1−2ϵ1−ϵ≈1,x1=2−x2≈1. x_2 = \frac{1 - 2\epsilon}{1 - \epsilon} \approx 1, \\[10pt] x_1 = 2 - x_2 \approx 1.


1.7.2. Modyfikacja eliminacji Gaussa

Rozważmy, kk-ty krok eliminacji Gaussa.

Niech PijP_{ij} będzie macierzą permutacji Pij=[1⋱0⋯1⋮⋮1⋯0⋱1] P_{ij} = \begin{bmatrix} 1\\ & \ddots\\ && 0 & \dotsb & 1\\ && \vdots && \vdots\\ && 1 & \dotsb & 0\\ &&&&&\ddots\\ &&&&&& 1\\ \end{bmatrix}

Czyli PijP_{ij} różni się od II elementami pii=pjj=0p_{ii} = p_{jj} = 0 oraz pij=pji=1p_{ij} = p_{ji} = 1.
Ponadto PijT=Pij=Pij−1,Pij2=IP^T_{ij} = P_{ij} = P^{-1}_{ij}, \quad P^2_{ij} = I.
PijAP_{ij} A jest równoważne zamianie w macierzy AA wiersza ii-tego z jj-tym.
APijAP_{ij} jest równoważne zamianie w macierzy AA kolumny ii-tej z jj-tą.

W zapisie macierzowym częściowy wybór ma postać PpkA(k),Ppkb(k), P_{pk} A^{(k)}, \quad P_{pk} b^{(k)}, natomiast pełny wybór ma postać PpkA(k)Pkl,Ppkb(k). P_{pk} A^{(k)} P_{kl}, \quad P_{pk} b^{(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−1=A(n)L(n−1)Ppn−1n−1…L(2)Pp22L(1)Pp11P−1PA(1)P‾=A(n) \begin{aligned} L^{(n-1)} P_{p_{n-1} n-1} \dots L^{(2)} P_{p_2 2} L^{(1)} P_{p_1 1}A^{(1)} P_{1 j_1} P_{2 j_2} \dots P_{n-1, j_{n-1}} &= A^{(n)}\\ L^{(n-1)} P_{p_{n-1} n-1} \dots L^{(2)} P_{p_2 2} L^{(1)} P_{p_1 1} P^{-1} P A^{(1)} \overline{P} &= A^{(n)} \end{aligned} gdzie

L=(L(n−1)Ppn−1n−1…L(2)Pp22L(1)Pp22…Ppn−1n−1)−1L = \left( L^{(n-1)} P_{p_{n-1} n-1} \dots L^{(2)} P_{p_2 2} L^{(1)} P_{p_2 2} \dots P_{p_{n-1} n-1} \right)^{-1} jest macierzą dolno trójkątną spełniającą równanie LU=PAP‾ LU = PA\overline{P} gdzie U=A(n)U = A^{(n)}.

W przypadku częściowego wyboru mamy po prostu P‾=I\overline{P} = I.
Zatem LU=PA. LU = PA.

Znany rozkład LU=PALU = PA możemy wykorzystać do rozwiązania układu równań Ax=bAx = b Ly=Pb,Ux=y. Ly = Pb, \quad Ux = y.

Wyznacznik macierzy obliczamy następująco: det⁡(A)=(−1)p∏i=1nuii \det(A) = (-1)^p \prod_{i=1}^n u_{ii} gdzie pp jest liczbą przestawień kolumn i wierszy.


2. Drugi etap eliminacji Gaussa

Mamy Ux=bUx = b, gdzie

Czyli: u11x1+u12x2+⋯+u1nxn=b1u22x2+⋯+u2nxn=b2⋱⋮⋮unnxn=bn \begin{matrix} u_{11} x_1 &+ &u_{12} x_2 &+ &\dotsb &+ u_{1n}x_n &= &b_1\\ & &u_{22} x_2 &+ &\dotsb &+ u_{2n} x_n &= &b_2\\ && &\ddots & & \vdots && \vdots\\ &&&&& u_{nn} x_n &= &b_n \end{matrix} (idziemy od dołu do góry stopniowo, jeden po drugim, wyznaczając kolejne zmienne)

Zakładamy, że macierz UU jest nieosobliwa (det⁡(U)≠0\det(U) \neq 0) stąd ukk≠0u_{kk} \neq 0 dla k=1,…,nk = 1,\dots,n. Wyznaczamy xnx_n z ostatniego równania xn=bnunn x_n = \frac{b_n}{u_{nn}}

Dalej wyznaczamy xkx_k dla k=(n−1),…,1k = (n-1),\dots,1 xk=bk−∑j=k+1nukjxjukk x_k = \frac{b_k - \sum_{j = k+1}^n u_{kj} x_j}{u_{kk}}