Multiplicar una matriz por un escalar consiste en multiplicar todos sus elementos por el mismo número. La operación conserva las dimensiones y permite ampliar, reducir, invertir o anular los valores de la matriz.
Un escalar es un único número. Cuando multiplicamos una matriz por un escalar, aplicamos ese mismo factor a todos los elementos de la matriz.
A diferencia de la suma de matrices, esta operación no necesita otra matriz del mismo orden. Solo requiere un número y una matriz válida.
Sea A = [aij] una matriz de orden m × n y sea k un escalar. El producto kA se define mediante:
La posición de cada elemento se conserva. Solo cambia su valor.
const A = [[1, 2], [3, 4]];
const k = 3;
const resultado = A.map(fila =>
fila.map(valor => k * valor)
);
console.log(resultado);
Un escalar negativo cambia el signo de los elementos además de modificar su magnitud. El escalar cero convierte todos los elementos en cero.
| Valor de k | Efecto sobre A | Resultado especial |
|---|---|---|
| k > 1 | Aumenta las magnitudes | Ampliación |
| 0 < k < 1 | Reduce las magnitudes | Contracción |
| k = 0 | Anula todos los valores | Matriz nula |
| k = -1 | Cambia todos los signos | Matriz opuesta |
| k < -1 | Invierte signos y aumenta magnitudes | Reflexión y ampliación |
const A = [[2, -3], [5, 1]];
const negativa = A.map(fila => fila.map(valor => -2 * valor));
const nula = A.map(fila => fila.map(valor => 0 * valor));
console.log("-2A:", negativa);
console.log("0A:", nula);
Multiplicar por una fracción reduce proporcionalmente los valores. Dividir una matriz por un número distinto de cero equivale a multiplicarla por su recíproco.
const A = [[8, 12], [20, 4]];
const mitad = A.map(fila =>
fila.map(valor => 0.5 * valor)
);
console.log(mitad);
El resultado es [[4, 6], [10, 2]].
La operación puede implementarse recorriendo cada fila y cada elemento.
function multiplicarPorEscalar(matriz, escalar) {
return matriz.map(fila =>
fila.map(valor => escalar * valor)
);
}
const A = [[1, 2, 3], [4, 5, 6]];
console.log(multiplicarPorEscalar(A, 4));
La función funciona con matrices cuadradas, rectangulares, fila o columna porque no modifica su forma.
La multiplicación por un escalar conserva la cantidad de filas y columnas. También conserva muchos tipos estructurales.
Existe una excepción de nombre: al multiplicar la identidad por un número distinto de 1 obtenemos una matriz diagonal escalar, pero ya no una matriz identidad.
Multiplicar la suma de dos matrices por un escalar equivale a multiplicar cada matriz y luego sumar los resultados.
const A = [[1, 2], [3, 4]];
const B = [[5, 6], [7, 8]];
const k = 3;
const izquierda = A.map((fila, i) =>
fila.map((valor, j) => k * (valor + B[i][j]))
);
const derecha = A.map((fila, i) =>
fila.map((valor, j) => k * valor + k * B[i][j])
);
console.log(izquierda);
console.log(derecha);
La suma de dos escalares multiplicada por una matriz puede distribuirse.
const A = [[2, 4], [6, 8]];
const k = 2;
const h = 3;
const izquierda = A.map(fila =>
fila.map(valor => (k + h) * valor)
);
const derecha = A.map(fila =>
fila.map(valor => k * valor + h * valor)
);
console.log(izquierda);
console.log(derecha);
Aplicar un escalar y luego otro equivale a multiplicar ambos escalares primero.
const A = [[1, -2], [3, 5]];
const k = 4;
const h = -2;
const dosPasos = A.map(fila =>
fila.map(valor => k * (h * valor))
);
const unPaso = A.map(fila =>
fila.map(valor => (k * h) * valor)
);
console.log(dosPasos);
console.log(unPaso);
Los escalares 1, 0 y -1 producen resultados fundamentales.
const A = [[3, -1], [6, 2]];
const porUno = A.map(fila => fila.map(valor => valor));
const porCero = A.map(fila => fila.map(() => 0));
const opuesta = A.map(fila => fila.map(valor => -valor));
console.log("1A:", porUno);
console.log("0A:", porCero);
console.log("-A:", opuesta);
La matriz opuesta permite expresar una resta como suma.
const A = [[8, 6], [5, 9]];
const B = [[3, 1], [2, 4]];
const medianteResta = A.map((fila, i) =>
fila.map((valor, j) => valor - B[i][j])
);
const medianteOpuesta = A.map((fila, i) =>
fila.map((valor, j) => valor + (-1) * B[i][j])
);
console.log(medianteResta);
console.log(medianteOpuesta);
Si una matriz contiene las coordenadas de varios puntos, multiplicarla por k escala todas las coordenadas respecto del origen.
const puntos = [
[1, 1],
[4, 1],
[2, 3]
];
const escala = 2;
const puntosEscalados = puntos.map(punto =>
punto.map(coordenada => escala * coordenada)
);
console.log(puntosEscalados);
Un factor entre 0 y 1 acerca los puntos al origen. Un factor negativo también los refleja a través del origen.
Una imagen en escala de grises puede representarse mediante una matriz de intensidades. Multiplicar por un factor modifica el brillo relativo.
const imagen = [
[40, 80, 120],
[100, 160, 220]
];
const factor = 1.25;
const ajustada = imagen.map(fila =>
fila.map(pixel => Math.min(255, Math.round(factor * pixel)))
);
console.log(ajustada);
El redondeo y el límite de 255 son reglas del formato de imagen. Por eso el resultado final ya no es exclusivamente la multiplicación matricial pura.
Una combinación lineal suma matrices previamente multiplicadas por escalares.
function combinar(A, B, k, h) {
return A.map((fila, i) =>
fila.map((valor, j) => k * valor + h * B[i][j])
);
}
const A = [[1, 2], [3, 4]];
const B = [[4, 3], [2, 1]];
console.log(combinar(A, B, 0.75, 0.25));
Este tipo de mezcla aparece al interpolar datos, combinar imágenes o ponderar resultados.
Una función reutilizable debe verificar la estructura de la matriz y que tanto sus elementos como el escalar sean números finitos.
function escalarMatriz(matriz, escalar) {
if (!Number.isFinite(escalar)) {
throw new Error("El escalar debe ser un número finito");
}
if (!Array.isArray(matriz) || matriz.length === 0) {
throw new Error("La matriz no puede estar vacía");
}
const columnas = Array.isArray(matriz[0]) ? matriz[0].length : 0;
const valida = columnas > 0 && matriz.every(fila =>
Array.isArray(fila) && fila.length === columnas && fila.every(Number.isFinite)
);
if (!valida) throw new Error("La matriz debe ser rectangular y numérica");
return matriz.map(fila =>
fila.map(valor => escalar * valor)
);
}
console.log(escalarMatriz([[1, 2, 3], [4, 5, 6]], 2.5));
Crear una nueva matriz conserva los datos originales. Modificar en el lugar puede reducir memoria, pero cambia la entrada recibida.
const A = [[1, 2], [3, 4]];
const k = 3;
for (let i = 0; i < A.length; i++) {
for (let j = 0; j < A[i].length; j++) {
A[i][j] *= k;
}
}
console.log(A);
Esta versión altera A. Conviene utilizarla solamente cuando el programa no necesita conservar la matriz original.
Los productos decimales pueden contener pequeñas aproximaciones de punto flotante.
const A = [[0.1, 0.2], [0.3, 0.4]];
const resultado = A.map(fila =>
fila.map(valor => 3 * valor)
);
console.log(resultado);
Otros errores frecuentes son:
La multiplicación por un escalar transforma uniformemente todos los elementos de una matriz sin cambiar sus dimensiones. Sus propiedades permiten distribuir factores, construir matrices opuestas y expresar combinaciones lineales de forma clara.
En el próximo tema estudiaremos la multiplicación de matrices, una operación diferente en la que las dimensiones internas determinan si el producto puede realizarse.