Gaußian elimination
Gaußian elimination is an algorithm by which a system of linear equations may be manipulated into Row echelon form through elementary row operations.
The algorithm deals with the augmented matrix representation of the system
- If
, if possible, interchange the pivot row with one of the rows below it. If this is not possible, i.e. all entries below the pivot are also, move the pivot one column to the right. - If
then add a suitable multiple of the pivot row to every row below it, ensuring that every entry below the pivot is.
This process is continued until the pivot position is off the matrix. A modified version, which instead yields reduced row echelon form, is Gauß-Jordan elimination
Implementation
JavaScript
Below is a procedural implementation of the algorithm in JavaScript.
const exampleMatrix = [
[2, 1, 2, 4],
[2, 1, 1, 0],
[4, 3, 2, 4],
];
const scale = (a) => (v) => v.map((x) => a * x);
const add = (v) => (u) => {
let result = [];
for (let i = 0; i < v.length && i < u.length; i++) {
result.push(v[i] + u[i]);
}
return result;
};
const GaußianElimination = (input) => {
let matrix = input.slice(0);
const m = matrix.length;
const n = matrix[0].length - 1; // do not include the augmentation column
let r = 0;
let c = 0;
while (r < m && c < n) {
if (matrix[r][c] === 0) {
let swapped = false;
for (let i = r + 1; i < m; i++) {
if (matrix[i][c] !== 0 && !swapped) {
const buffer = matrix[r];
matrix[r] = matrix[i];
matrix[i] = buffer;
swapped = true;
}
}
if (!swapped) {
c++;
}
} else {
for (let i = r + 1; i < m; i++) {
console.log(i, c, -matrix[i][c] / matrix[r][c]);
matrix[i] = add(matrix[i])(
scale(-matrix[i][c] / matrix[r][c])(matrix[r])
);
}
r++;
c++;
}
}
return matrix;
};
#state/tidy | #SemBr | #lang/en