La notación matricial permite nombrar una matriz, expresar sus dimensiones y localizar cada elemento mediante su fila y su columna. Comprenderla es indispensable para interpretar fórmulas y convertirlas en código.
En el tema anterior aprendimos que una matriz organiza números en filas y columnas. Ahora necesitamos una forma precisa de referirnos a la matriz completa, a su tamaño y a cada uno de sus elementos.
La notación matricial cumple ese propósito. Gracias a ella podemos describir operaciones sin escribir todos los valores y comunicar con claridad qué posición interviene en cada cálculo.
En este ejemplo, A es el nombre de la matriz. Tiene dos filas, tres columnas y seis elementos.
Las matrices suelen nombrarse con letras mayúsculas: A, B, C o M. Los elementos individuales suelen representarse con la misma letra en minúscula y dos subíndices.
Esta convención no es una obligación del lenguaje de programación, pero es muy útil al traducir fórmulas matemáticas a algoritmos.
Una matriz se escribe encerrando sus elementos entre paréntesis o corchetes. Los números de una misma fila se colocan horizontalmente y las filas se ubican una debajo de otra.
La misma matriz puede representarse en JavaScript con un arreglo por cada fila:
const A = [
[3, 6, 9],
[2, 4, 8]
];
console.log(A);
Si una matriz tiene m filas y n columnas, decimos que su dimensión u orden es m × n. Siempre se escribe primero la cantidad de filas.
También puede utilizarse la notación A ∈ ℝm×n para indicar que A es una matriz de m filas y n columnas cuyos elementos son números reales.
En una matriz rectangular representada con arreglos, la cantidad de filas es la longitud del arreglo exterior y la cantidad de columnas es la longitud de una fila.
const A = [
[3, 6, 9],
[2, 4, 8]
];
const filas = A.length;
const columnas = A[0].length;
console.log(`${filas} × ${columnas}`);
console.log("Cantidad de elementos:", filas * columnas);
Antes de consultar A[0].length conviene comprobar que la matriz no esté vacía.
Una matriz genérica A de orden m × n puede escribirse utilizando símbolos en lugar de valores concretos.
La expresión A = [aij] resume esta idea: A está formada por elementos aij, donde i recorre las filas y j recorre las columnas.
En el elemento aij, el primer subíndice siempre corresponde a la fila y el segundo a la columna.
| Elemento | Fila | Columna | Lectura |
|---|---|---|---|
| a11 | 1 | 1 | Primera fila, primera columna |
| a13 | 1 | 3 | Primera fila, tercera columna |
| a21 | 2 | 1 | Segunda fila, primera columna |
| a23 | 2 | 3 | Segunda fila, tercera columna |
Los subíndices no forman el número veintitrés: a23 significa el elemento ubicado en la fila 2 y la columna 3.
Consideremos la siguiente matriz:
Cada par de subíndices identifica una única posición dentro de la matriz.
En la notación matemática se comienza a contar desde 1. En los arreglos de JavaScript se comienza desde 0. Por eso debemos restar uno a cada índice matemático al acceder al arreglo.
const B = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
];
console.log("b₂₃ =", B[1][2]);
console.log("b₃₁ =", B[2][0]);
El elemento b23 se encuentra en B[1][2], y el elemento b31 se encuentra en B[2][0].
Podemos crear una función que reciba índices con la convención matemática y realice internamente la conversión a índices de JavaScript.
function elemento(matriz, fila, columna) {
return matriz[fila - 1][columna - 1];
}
const A = [
[5, 8, 1],
[2, 7, 4]
];
console.log("a₁₂ =", elemento(A, 1, 2));
console.log("a₂₃ =", elemento(A, 2, 3));
La función permite escribir elemento(A, 2, 3) para pedir el elemento de la segunda fila y la tercera columna.
Una fila de una matriz puede considerarse un vector fila. La fila i contiene todos los elementos cuyo primer subíndice es i.
En JavaScript, cada elemento del arreglo exterior ya representa una fila completa.
const A = [
[5, 8, 1],
[2, 7, 4],
[9, 3, 6]
];
const segundaFila = A[1];
console.log(segundaFila);
El resultado es [2, 7, 4].
La columna j contiene todos los elementos cuyo segundo subíndice es j.
El símbolo T indica que los componentes se disponen verticalmente. Con arreglos de JavaScript debemos extraer la misma posición de cada fila.
const A = [
[5, 8, 1],
[2, 7, 4],
[9, 3, 6]
];
const indiceColumna = 1;
const segundaColumna = A.map(fila => fila[indiceColumna]);
console.log(segundaColumna);
El resultado es [8, 7, 3].
Los vectores suelen nombrarse con letras minúsculas, a veces en negrita o con una flecha: v, u o w. Sus componentes pueden escribirse como v1, v2, ..., vn.
Cuando un vector se escribe como columna, puede considerarse una matriz de orden n × 1. Cuando se escribe como fila, puede considerarse una matriz de orden 1 × n.
En una matriz cuadrada, la diagonal principal está formada por los elementos cuyos índices son iguales: a11, a22, a33, etc.
La diagonal secundaria recorre la matriz desde la esquina superior derecha hasta la esquina inferior izquierda.
const A = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
const principal = A.map((fila, i) => fila[i]);
const secundaria = A.map((fila, i) => fila[A.length - 1 - i]);
console.log("Principal:", principal);
console.log("Secundaria:", secundaria);
Las letras permiten expresar operaciones entre matrices sin mostrar todos sus elementos. Algunas notaciones que utilizaremos son:
const A = [
[1, 2],
[3, 4]
];
const k = 5;
const kA = A.map(fila =>
fila.map(valor => k * valor)
);
console.log(kA);
La expresión matemática kA se traduce en multiplicar cada elemento aij por k.
La letra griega sigma mayúscula, Σ, representa una suma de términos que siguen un patrón. Es muy frecuente en productos escalares y multiplicaciones de matrices.
const a = [2, 4, 6];
const b = [1, 3, 5];
const sumaDeProductos = a.reduce(
(acumulador, valor, k) => acumulador + valor * b[k],
0
);
console.log(sumaDeProductos);
El índice k del código cumple el papel del índice de la sumatoria, con la diferencia de que JavaScript comienza a contar desde cero.
La notación m × n supone que todas las filas tienen la misma cantidad de columnas. Podemos crear una función que compruebe esta condición y devuelva el orden.
function obtenerOrden(matriz) {
if (matriz.length === 0) return [0, 0];
const columnas = matriz[0].length;
const esRectangular = matriz.every(fila => fila.length === columnas);
if (!esRectangular) {
throw new Error("Todas las filas deben tener igual longitud");
}
return [matriz.length, columnas];
}
console.log(obtenerOrden([[1, 2, 3], [4, 5, 6]]));
El resultado [2, 3] indica dos filas y tres columnas.
Dominar esta notación facilita la lectura de fórmulas, la implementación de operaciones y la detección de errores de dimensiones o índices.
En el próximo tema estudiaremos los distintos tipos de matrices y aprenderemos a clasificarlas según su forma y sus elementos.