4. Tipos de matrices

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.

4.1 Introducción

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.

La forma de una matriz depende de sus dimensiones.
Sus propiedades dependen de los valores y de la ubicación de sus elementos.

4.2 Las clasificaciones pueden superponerse

Los tipos de matrices no forman categorías completamente separadas. Una misma matriz puede cumplir varias definiciones al mismo tiempo.

I = [ 1   0 ]
    [ 0   1 ]

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.

4.3 Matriz fila

Una matriz fila tiene una sola fila y una o más columnas. Su orden general es 1 × n.

F = [4   7   2   9]

Orden: 1 × 4

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}`);

4.4 Matriz columna

Una matriz columna tiene una sola columna y una o más filas. Su orden general es m × 1.

C = [4]
    [7]
    [2]
    [9]

Orden: 4 × 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}`);

4.5 Matriz rectangular

En este curso llamaremos rectangular a una matriz cuya cantidad de filas es diferente de su cantidad de columnas: m ≠ n.

R = [ 1   2   3 ]
    [ 4   5   6 ]

Orden: 2 × 3

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);

4.6 Matriz cuadrada

Una matriz cuadrada tiene igual cantidad de filas y columnas. Su orden se expresa como n × n.

A = [ 2   5   1 ]
    [ 4   3   7 ]
    [ 6   8   9 ]

Orden: 3 × 3

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]]));

4.7 Matriz nula

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.

O = [ 0   0   0 ]
    [ 0   0   0 ]

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));

4.8 Matriz identidad

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.

I3 = [ 1   0   0 ]
      [ 0   1   0 ]
      [ 0   0   1 ]

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));

4.9 Matriz diagonal

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.

D = [ 5   0   0 ]
    [ 0   2   0 ]
    [ 0   0   8 ]
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]]));

4.10 Matriz escalar

Una matriz escalar es una matriz diagonal cuyos elementos de la diagonal principal son todos iguales.

S = [ 4   0   0 ]
    [ 0   4   0 ]
    [ 0   0   4 ]

S = 4I3

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.

4.11 Matriz triangular superior

Una matriz triangular superior es cuadrada y todos los elementos situados debajo de la diagonal principal son cero.

U = [ 2   5   7 ]
    [ 0   3   4 ]
    [ 0   0   6 ]

En términos de índices, se cumple uij = 0 cuando i > j.

4.12 Matriz triangular inferior

Una matriz triangular inferior es cuadrada y todos los elementos situados encima de la diagonal principal son cero.

L = [ 2   0   0 ]
    [ 5   3   0 ]
    [ 7   4   6 ]

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]]));

4.13 Matriz simétrica

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.

A = [ 2   5   1 ]
    [ 5   3   7 ]
    [ 1   7   4 ]

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));

4.14 Matriz antisimétrica

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.

K = [  0   2   -3 ]
    [ -2   0     4 ]
    [  3  -4     0 ]

Este tipo aparece, por ejemplo, al representar ciertos productos vectoriales y rotaciones.

4.15 Matrices densas y dispersas

En programación también es útil clasificar las matrices según la cantidad de ceros que contienen.

  • Una matriz densa tiene una proporción importante de elementos distintos de cero.
  • Una matriz dispersa contiene principalmente ceros.

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.

Una matriz diagonal grande es dispersa: solo necesita valores en la diagonal, aunque su representación completa contenga muchos ceros.

4.16 Resumen comparativo

Tipo Condición principal Debe ser cuadrada
Fila Una sola fila No
Columna Una sola columna No
Rectangular m ≠ n No
Cuadrada m = n
Nula Todos sus elementos son cero No
Identidad Unos en la diagonal y ceros fuera de ella
Diagonal Ceros fuera de la diagonal principal
Triangular superior Ceros debajo de la diagonal
Triangular inferior Ceros encima de la diagonal
Simétrica aij = aji

4.17 Clasificar una matriz con JavaScript

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]]));

4.18 Errores frecuentes

  • Creer que una matriz puede pertenecer a un solo tipo.
  • Confundir una matriz nula con una matriz vacía.
  • Considerar identidad a cualquier matriz que tenga unos en la diagonal sin revisar los demás elementos.
  • Exigir que los valores de la diagonal de una matriz diagonal sean distintos de cero.
  • Confundir triangular superior con triangular inferior.
  • Comprobar simetría sin verificar primero que la matriz sea cuadrada.
  • Confundir una matriz escalar con la multiplicación de una matriz por un escalar.

4.19 Qué debes recordar de este tema

  • Las dimensiones permiten distinguir matrices fila, columna, rectangulares y cuadradas.
  • Los valores y su posición definen matrices nulas, identidad, diagonales, triangulares y simétricas.
  • Una matriz puede cumplir varias clasificaciones simultáneamente.
  • La identidad tiene unos en la diagonal principal y ceros en las demás posiciones.
  • Una matriz diagonal tiene ceros fuera de la diagonal principal.
  • Una matriz simétrica cumple A = AT.
  • Las matrices dispersas requieren técnicas de almacenamiento especiales cuando son muy grandes.

4.20 Conclusión

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.