homechevron_rightStudychevron_rightMathchevron_rightAlgebrachevron_rightlinear algebra

# Matrix triangulation

Matrix triangulation with Gauss and Bareiss methods

Here are the two calculators for matrix triangulation below.
The first uses Gauss method, the second - Bareiss method. Methods description and theory below.

### Matrix triangulation (Gauss method)

Digits after the decimal point: 4
Triangular matrix (Gauss method)

Triangular matrix (Gauss method with maximum selection in a column):

Triangular matrix (Gauss method with a maximum choice in entire matrix):

### Matrix triangulation (Bareiss method)

Digits after the decimal point: 4
Triangular matrix (Bareiss method)

Triangular matrix (Bareiss method with maximum selection in a column)

Triangular matrix (Bareiss method with a maximum choice in entire matrix)

So, first we will give a notion to a triangular or row echelon matrix
Matrix has a row echelon form if:

1. all zero rows, if any, belong at the bottom of the matrix
2.The leading coefficient (the first nonzero number from the left, also called the pivot) of a nonzero row is always strictly to the right of the leading coefficient of the row above it
2. All nonzero rows (rows with at least one nonzero element) are above any rows of all zeroes

Row echelon matrix example:
1 0 2 5
0 3 0 0
0 0 0 4
The notion of triangular matrix is more narrow and it's used for square matrices only. It goes like this: the triangular matrix is a square matrix where all elements below the main diagonal are zero. It's actually called upper triangular matrix, but we will use it. It's obvious that upper triangular matrix is also a row echelon matrix

Example of upper triangular matrix:
1 0 2 5
0 3 1 3
0 0 4 2
0 0 0 3
By the way, the determinant of a triangular matrix is calculated by simply multiplying all it's diagonal elements.

They have an amazing property - any rectangular matrix can be reduced to row echelon matrix with the elementary transformations.

What's the elementary transformations, you may ask?
Elementary matrix transformations are the following operations:
Элементарными преобразованиями матрицы называют следующие операции:

1. Row switching (A row within the matrix can be switched with another row).
2. Row multiplication(Each element in a row can be multiplied by a non-zero constant).
3. Row addition (A row can be replaced by the sum of that row and a multiple of another row).

What now?
Elementary matrix transformations retain equivalence of matrices. And if you remember that the systems of linear algebraic equations are written just in matrix form, it means that the elementary matrix transformations don't change the set of solutions of linear algebraic equations system, which this matrix represents.

By triangulating AX=B linear equation matrix to A'X = B' i.e. with corresponding column B transformation you can do so called "backsubstitution".

To be clear, we will be using triangular matrix above and rewrite the equation system to a more common form ( I've made up column B):
$1*x_1 + 0*x_2 + 2 * x_3 + 5 * x_4 = 10$$0*x_1 + 3*x_2 + 1 * x_3 + 3 * x_4 = 7$$0*x_1 + 0*x_2 + 4 * x_3 + 2 * x_4 = 5$$0*x_1 + 0*x_2 + 0 * x_3 + 3 * x_4 = 9$
It's clear that first we'll find $x_4$, then, we substitute it to the previous equation, find $x_3$ and so on - moving from the last equation to the first. That what is called backsubstitution/
This row reduction algorithm is called Gauss method. Gauss method is a classical method for solving systems of linear equations. It's also Gaussian elimination as it's a method of successive elimination of variables, when with the help of elementary transformations the equation systems is reduced to a row echelon (or triangular) form, in which all other variables are placed(starting from the last).

How can you zero the variable $x_1$ in the secon equation?
By subtracting the first one from it, multiplied by a factor $\frac{a_{21}}{a_{11}}$
Here is an example:
$2*x_1 + 3*x_2 + 4 * x_3 = 10$$6*x_1 + 3*x_2 - 4 * x_3 = 7$
Zero $x_1$ in the first equation
$6*x_1 + 3*x_2 - 4 * x_3 - \frac{6}{2}(2*x_1 + 3*x_2 + 4 * x_3)= 7 - \frac{6}{2}10$$6*x_1 + 3*x_2 - 4 * x_3 - 6*x_1 - 9*x_2 - 12 * x_3 = 7 - 30$$-6*x_2 - 16 * x_3 = -23$
There is no $x_1$ in the second equation
In generalized sense, Gauss method can be represented as follows:
$\begin{matrix}For\, j = 0,..., N-2 \\ \qquad \qquad For\,i = j + 1,..., N - 1 \\ \qquad \qquad \qquad \vec{a_i} \leftarrow \vec{a_i} - \frac{a_{ij}}{a_{jj}} \vec{a_j} \end{matrix}$
where N - row dimension,
$\vec{a_i}$ - i-row,
$a_{ij}$ - element in i row, j column

It seems as a great method, but there is one thing. It's division by $a_{jj}$ occurring in formula. First, if diagonal element equals zero, this method won't work. Second, during the calculation the deviation will rise and the further, the more. So the result won't be precise.
For the deviation reduction, the Gauss method modifications are used. They based on the fact that the larger the denominator the lower the deviation. These modifications are Gauss method with maximum selection in a column and Gauss method with a maximum choice in the entire matrix. As the name implies, before each stem of variable exclusion the element with maximum value is searched for in a row (entire matrix) and row permutation is performed, so it will change places with $a_{jj}$.

But there is a radical modification of Gauss method - Bareiss method.
How can you get rid of division? By multiplying the row $\vec{a_i}$ by $a_{jj}$ before subtracting. Then you have to subtract $\vec{a_i}$, multiplyied by $a_{ij}$ without any division.
$\vec{a_i} \leftarrow a_{jj}\vec{a_i} - a_{ij} \vec{a_j}$.
Seems good, but there is a problem of element value increase during the calculations

Bareiss offered to divide the expression above by $a_{j-1,j-1}$ and showed that whether the initial matrix elements are the whole numbers then the resulting number will be whole. It's also assumed that for the zero row $a_{-1,-1}=1$.

By the way, the fact that Bareiss algorithm reduces integral elements of the initial matrix to a triangular matrix with integral elements, i.e. without deviation accumulation, it quite an important feature from the standpoint of machine arithmetic.

Bareiss algorithm can be may be represented as:
$\begin{matrix} a_{-1,-1}=1 \\For\, j = 0,..., N-2 \\ \qquad \qquad For\,i = j + 1,..., N - 1 \\ \qquad \qquad \qquad \vec{a_i} \leftarrow \frac{a_{jj}\vec{a_i} - a_{ij} \vec{a_j}}{a_{j-1,j-1}} \end{matrix}$

This algorithm can be upgraded, similarly to Gauss, with maximum selection in a column (entire matrix) and rearrangement of the corresponding rows (rows and columns).

You can have a look at amazing lecture on this theme here