Las matrices se clasifican según su cantidad de filas y columnas, la ubicación de sus elementos y las propiedades que cumplen. Reconocer cada tipo permite elegir operaciones y algoritmos adecuados.
En los temas anteriores aprendimos a representar matrices y a localizar sus elementos mediante índices. Ahora veremos que no todas las matrices tienen la misma forma ni se comportan de igual manera.
Clasificar una matriz permite anticipar sus propiedades. Por ejemplo, una matriz cuadrada puede tener determinante e inversa, una matriz diagonal simplifica muchos cálculos y una matriz nula actúa como elemento neutro de la suma.
Los tipos de matrices no forman categorías completamente separadas. Una misma matriz puede cumplir varias definiciones al mismo tiempo.
La matriz I es cuadrada, diagonal, identidad, triangular superior, triangular inferior y simétrica. Cada nombre destaca una propiedad diferente.
Por eso, al clasificar una matriz, no siempre buscamos una única respuesta: identificamos todas las propiedades que cumple.
Una matriz fila tiene una sola fila y una o más columnas. Su orden general es 1 × n.
Una matriz fila también puede interpretarse como un vector fila.
const F = [[4, 7, 2, 9]];
const esMatrizFila = F.length === 1;
console.log(esMatrizFila);
console.log(`Orden: ${F.length} × ${F[0].length}`);
Una matriz columna tiene una sola columna y una o más filas. Su orden general es m × 1.
const C = [[4], [7], [2], [9]];
const esMatrizColumna = C.every(fila => fila.length === 1);
console.log(esMatrizColumna);
console.log(`Orden: ${C.length} × ${C[0].length}`);
En este curso llamaremos rectangular a una matriz cuya cantidad de filas es diferente de su cantidad de columnas: m ≠ n.
Las matrices fila y columna con más de un elemento son casos particulares de matrices rectangulares.
const R = [
[1, 2, 3],
[4, 5, 6]
];
const filas = R.length;
const columnas = R[0].length;
console.log("¿Es rectangular no cuadrada?", filas !== columnas);
Una matriz cuadrada tiene igual cantidad de filas y columnas. Su orden se expresa como n × n.
Conceptos como diagonal principal, traza, determinante, valores propios y matriz inversa se aplican principalmente a matrices cuadradas.
function esCuadrada(matriz) {
if (matriz.length === 0) return false;
return matriz.every(fila => fila.length === matriz.length);
}
console.log(esCuadrada([[1, 2], [3, 4]]));
console.log(esCuadrada([[1, 2, 3], [4, 5, 6]]));
Una matriz nula, también llamada matriz cero, tiene todos sus elementos iguales a cero. Puede ser cuadrada o rectangular y suele representarse con la letra O o con un cero destacado.
Al sumar una matriz nula de igual orden a otra matriz, esta no cambia.
function esNula(matriz) {
return matriz.every(fila =>
fila.every(valor => valor === 0)
);
}
const O = [[0, 0, 0], [0, 0, 0]];
console.log(esNula(O));
La matriz identidad es cuadrada, tiene unos en la diagonal principal y ceros en todas las demás posiciones. Se representa con la letra I.
La identidad cumple en la multiplicación de matrices un papel semejante al número 1 en la multiplicación de escalares: AI = IA = A, cuando las dimensiones son compatibles.
function crearIdentidad(orden) {
return Array.from({ length: orden }, (_, fila) =>
Array.from({ length: orden }, (_, columna) =>
fila === columna ? 1 : 0
)
);
}
console.log(crearIdentidad(3));
Una matriz diagonal es cuadrada y todos sus elementos fuera de la diagonal principal son cero. Los valores de la diagonal pueden ser diferentes entre sí e incluso alguno puede ser cero.
function esDiagonal(matriz) {
if (!matriz.length || !matriz.every(fila => fila.length === matriz.length)) {
return false;
}
return matriz.every((fila, i) =>
fila.every((valor, j) => i === j || valor === 0)
);
}
console.log(esDiagonal([[5, 0, 0], [0, 2, 0], [0, 0, 8]]));
Una matriz escalar es una matriz diagonal cuyos elementos de la diagonal principal son todos iguales.
Toda matriz identidad es una matriz escalar con valor diagonal 1. No debe confundirse una matriz escalar con un escalar: la primera es una matriz; el segundo es un único número.
Una matriz triangular superior es cuadrada y todos los elementos situados debajo de la diagonal principal son cero.
En términos de índices, se cumple uij = 0 cuando i > j.
Una matriz triangular inferior es cuadrada y todos los elementos situados encima de la diagonal principal son cero.
En términos de índices, se cumple lij = 0 cuando i < j.
function tipoTriangular(matriz) {
const n = matriz.length;
if (!n || !matriz.every(fila => fila.length === n)) return "no cuadrada";
let superior = true;
let inferior = true;
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (i > j && matriz[i][j] !== 0) superior = false;
if (i < j && matriz[i][j] !== 0) inferior = false;
}
}
if (superior && inferior) return "diagonal";
if (superior) return "triangular superior";
if (inferior) return "triangular inferior";
return "no triangular";
}
console.log(tipoTriangular([[2, 5, 7], [0, 3, 4], [0, 0, 6]]));
Una matriz simétrica es cuadrada y permanece igual al intercambiar sus filas por sus columnas. En notación matricial se expresa como A = AT.
Los elementos reflejados respecto de la diagonal principal son iguales: aij = aji.
function esSimetrica(matriz) {
const n = matriz.length;
if (!n || !matriz.every(fila => fila.length === n)) return false;
return matriz.every((fila, i) =>
fila.every((valor, j) => valor === matriz[j][i])
);
}
const A = [[2, 5, 1], [5, 3, 7], [1, 7, 4]];
console.log(esSimetrica(A));
Una matriz antisimétrica es cuadrada y cumple AT = -A. Esto significa que aij = -aji. Como consecuencia, todos los elementos de su diagonal principal son cero.
Este tipo aparece, por ejemplo, al representar ciertos productos vectoriales y rotaciones.
En programación también es útil clasificar las matrices según la cantidad de ceros que contienen.
Las matrices dispersas pueden almacenarse mediante estructuras especiales que guardan solamente las posiciones no nulas. Esto reduce el uso de memoria cuando la matriz es muy grande.
| Tipo | Condición principal | Debe ser cuadrada |
|---|---|---|
| Fila | Una sola fila | No |
| Columna | Una sola columna | No |
| Rectangular | m ≠ n | No |
| Cuadrada | m = n | Sí |
| Nula | Todos sus elementos son cero | No |
| Identidad | Unos en la diagonal y ceros fuera de ella | Sí |
| Diagonal | Ceros fuera de la diagonal principal | Sí |
| Triangular superior | Ceros debajo de la diagonal | Sí |
| Triangular inferior | Ceros encima de la diagonal | Sí |
| Simétrica | aij = aji | Sí |
Podemos reunir varias comprobaciones en una función. Como una matriz puede pertenecer a varios tipos, el resultado será una lista.
function clasificarMatriz(matriz) {
if (!matriz.length || !matriz.every(fila => Array.isArray(fila))) {
return ["estructura no válida"];
}
const filas = matriz.length;
const columnas = matriz[0].length;
const rectangular = matriz.every(fila => fila.length === columnas);
if (!rectangular) return ["estructura no rectangular"];
const tipos = [];
if (filas === 1) tipos.push("fila");
if (columnas === 1) tipos.push("columna");
if (filas === columnas) tipos.push("cuadrada");
else tipos.push("rectangular");
const nula = matriz.every(fila => fila.every(valor => valor === 0));
if (nula) tipos.push("nula");
return tipos;
}
console.log(clasificarMatriz([[0, 0, 0], [0, 0, 0]]));
console.log(clasificarMatriz([[1, 2], [3, 4]]));
Clasificar matrices permite reconocer rápidamente su estructura y las propiedades que pueden aprovecharse al programar. Esta información ayuda a validar datos, simplificar operaciones y seleccionar representaciones eficientes.
En el próximo tema estudiaremos con mayor detalle la matriz fila y la matriz columna, su relación con los vectores y sus usos en programación.