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 k1k-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 n1n-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 k1k \gets 1 to (n1)(n-1):
    1. for i(k+1)i \gets (k+1) to nn:
      1. likaik(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)=[11lk+1,k1lk+2,kln,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 (n1)(n-1) krokach możemy zapisać A(n)=L(n1)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(n1)L(2)L(1)AA=(L(n1)L(2)L(1))1UA=L(1)1L(2)1L(n1)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=[11lk+1,k1lk+2,kln,k1]L=[1l211l31l321ln1ln2ln,n11] 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)1L(n1)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=L1b=L(n1)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 A1A^{-1} jest macierzą odwrotną do AA, jeżeli AA1=I. AA^{-1} = I.

Oznaczając A1A^{-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,,(n1)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=(1x2)ϵ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. ϵ=108\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 x21x_2 \approx 1 i x10x_1 \approx 0 znacznie różnią się od prawidłowych wartości x21x_2 \approx 1 i x11x_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]=[212ϵ]. \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=12ϵ1ϵ1,x1=2x21. 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=[101101] 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=Pij1,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(n1)Ppn1n1L(2)Pp22L(1)Pp11A(1)P1j1P2j2Pn1,jn1=A(n)L(n1)Ppn1n1L(2)Pp22L(1)Pp11P1PA(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(n1)Ppn1n1L(2)Pp22L(1)Pp22Ppn1n1)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)pi=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=b2unnxn=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 ukk0u_{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=(n1),,1k = (n-1),\dots,1 xk=bkj=k+1nukjxjukk x_k = \frac{b_k - \sum_{j = k+1}^n u_{kj} x_j}{u_{kk}}