Skip to main content

Section 4.4 Solving a system

How to solve a system
\begin{equation*} A\cdot v = b \end{equation*}
after we do a LU decomposition of \(A\text{?}\)

There are two steps. First, we re-write the system as
\begin{equation*} U\cdot v = L^{-1}\cdot b. \end{equation*}
There is no actual need to evaluate \(L^{-1}\text{,}\) it is enough to update the components of \(b\) every time we modify a row. Namely, we add to the line

A[j,k] = A[j,k] - L[j,i]*A[i,k]

the line

b[j] = b[j] - L[j,i]*b[i].

This gives us automatically at the r.h.s. the vector \(c=L^{-1}\cdot b\text{.}\)

System
\begin{equation*} U\cdot v = c \end{equation*}
is upper triangular and so, here the second point, it can be easily solved recursively.

Let us go back to the \(3\times 3\) system in Subsection 4.2.2. Notice that
\begin{equation*} \begin{pmatrix} 1&0&0\cr 4&1&0\cr 7&2&1\cr \end{pmatrix}^{-1} = \begin{pmatrix} 1&0&0\cr -4&1&0\cr 1&-2&1\cr \end{pmatrix} \end{equation*}
and, as already pointed out,
\begin{equation*} \begin{pmatrix} 1&0&0\cr -4&1&0\cr 1&-2&1\cr \end{pmatrix} \begin{pmatrix} 1\cr 1\cr 0\cr \end{pmatrix} = \begin{pmatrix} \phantom{-}1\cr -3\cr -1\cr \end{pmatrix}. \end{equation*}
So, after the Gaussian elimination process, the system is now
\begin{equation*} \begin{aligned} x+2y+3z&=1\cr \phantom{2x+}-3y-6z&=-3\cr \phantom{7x+y}-z&=-1\cr \end{aligned}. \end{equation*}
From the last we get immediately that \(z=1\text{,}\) by dividing the rhs component by the coefficient of \(z\text{.}\) Then we substitute \(z=1\) in the previous two equations, obtaining the \(2\times2\) system
\begin{equation*} \begin{aligned} x+2y&=-2\cr \phantom{2x+}-3y&=3\cr \end{aligned}. \end{equation*}
As above, one finds immediately that \(y=-1\) and, by substituting this value in the first equation, the system reduces to the single equation
\begin{equation*} x=0. \end{equation*}
Hence the solution is the vector
\begin{equation*} \begin{pmatrix} \phantom{-}0\cr -1\cr \phantom{-}1\cr \end{pmatrix}. \end{equation*}
The code below implements exactly this algorithm for a general \(n\times n\) matrix.
Below is the corresponding code using pivoting: