Transform any 3×3 matrix into its Column Echelon Form (CEF) using elementary column operations.
Enter Matrix Values:
Calculation Result
The Column Echelon Form (Reduced) of your matrix is:
Understanding Column Echelon Form (CEF)
Column Echelon Form is a matrix structure obtained through elementary column operations. While most students are familiar with Row Echelon Form (REF), CEF is its dual counterpart, focusing on columns rather than rows. A matrix is in Column Echelon Form if it satisfies specific conditions related to its columns' leading entries.
Conditions for Column Echelon Form
Any columns consisting entirely of zeros are moved to the far right of the matrix.
The first non-zero entry in each non-zero column (the pivot) must be a 1.
The pivot of a column must be in a row below the pivot of the column to its left.
In the Reduced Column Echelon Form, the row containing a pivot has no other non-zero entries in other columns.
Elementary Column Operations
Just as you manipulate rows, you can use these three operations to find the CEF:
Interchange: Swap two columns.
Scaling: Multiply a column by a non-zero constant.
Addition: Add a multiple of one column to another column.
Step-by-Step Example
Consider the matrix:
[ 1, 2 ]
[ 3, 6 ]
1. Pivot: The first column has a pivot 1 at row 0.
2. Elimination: To make the entry at row 0, column 1 zero, we perform: Col2 = Col2 – 2 * Col1.
3. Result:
[ 1, 0 ]
[ 3, 0 ]
This is now in Column Echelon Form. The second column is all zeros and is positioned on the right.
Why Use CEF?
Column Echelon Form is particularly useful in linear algebra for:
Finding the Range: The non-zero columns form a basis for the column space (range) of the matrix.
Determining Rank: The number of non-zero columns equals the rank of the matrix.
Solving Systems: It can be used as an alternative approach to analyzing linear transformations.
function calculateCEF() {
var m = [
[parseFloat(document.getElementById('m00').value) || 0, parseFloat(document.getElementById('m01').value) || 0, parseFloat(document.getElementById('m02').value) || 0],
[parseFloat(document.getElementById('m10').value) || 0, parseFloat(document.getElementById('m11').value) || 0, parseFloat(document.getElementById('m12').value) || 0],
[parseFloat(document.getElementById('m20').value) || 0, parseFloat(document.getElementById('m21').value) || 0, parseFloat(document.getElementById('m22').value) || 0]
];
var rows = 3;
var cols = 3;
var pivotCol = 0;
for (var r = 0; r < rows && pivotCol < cols; r++) {
// Find the best column for this row (partial pivoting for columns)
var selCol = pivotCol;
for (var c = pivotCol + 1; c Math.abs(m[r][selCol])) {
selCol = c;
}
}
// If the row is all zeros for remaining columns, skip row
if (Math.abs(m[r][selCol]) < 1e-10) {
continue;
}
// Swap columns
for (var i = 0; i < rows; i++) {
var temp = m[i][selCol];
m[i][selCol] = m[i][pivotCol];
m[i][pivotCol] = temp;
}
// Normalize pivot column
var divisor = m[r][pivotCol];
for (var i = 0; i < rows; i++) {
m[i][pivotCol] /= divisor;
}
// Eliminate other entries in this row
for (var c = 0; c < cols; c++) {
if (c !== pivotCol) {
var factor = m[r][c];
for (var i = 0; i < rows; i++) {
m[i][c] -= factor * m[i][pivotCol];
}
}
}
pivotCol++;
}
displayResult(m);
}
function displayResult(matrix) {
var container = document.getElementById('matrixOutput');
var resDiv = document.getElementById('resultContainer');
var details = document.getElementById('matrixDetails');
container.innerHTML = '';
var rank = 0;
for (var i = 0; i < 3; i++) {
var hasNonZero = false;
for (var j = 0; j < 3; j++) {
var val = matrix[i][j];
// Clean up precision
if (Math.abs(val) < 1e-10) val = 0;
var span = document.createElement('div');
span.style.padding = '10px';
span.style.background = '#fff';
span.style.border = '1px solid #ddd';
span.style.borderRadius = '4px';
span.innerText = val % 1 === 0 ? val : val.toFixed(2);
container.appendChild(span);
}
}
// Calculate Rank by checking columns
for (var j = 0; j < 3; j++) {
var colNonZero = false;
for (var i = 0; i 1e-10) colNonZero = true;
}
if (colNonZero) rank++;
}
details.innerHTML = 'Matrix Rank: ' + rank + 'Linearly Independent Columns: ' + rank;
resDiv.style.display = 'block';
resDiv.scrollIntoView({ behavior: 'smooth' });
}
function resetMatrix() {
var ids = ['m00', 'm01', 'm02', 'm10', 'm11', 'm12', 'm20', 'm21', 'm22'];
ids.forEach(function(id) {
document.getElementById(id).value = '0';
});
document.getElementById('resultContainer').style.display = 'none';
}