Multiplicación de matrices. Cómo hacer el programa en Java
Uno de las aplicaciones más comunes de los arreglos bidimensionales es la multiplicación de matrices. En esta entrada describiré como se realiza este proceso, y cómo se programa usando el lenguaje Java.
La operación de multiplicación de matrices.
La multiplicación o producto de matrices es la operación de composición efectuada entre dos matrices, o bien la multiplicación entre una matriz y un escalar según unas determinadas reglas. [Wikipedia]
Matrices multiplicables
Para poder realizar un producto de matrices, no es necesario que las dos matrices sean cuadradas, pero sí se debe cumplir que el número de columnas de la matriz A sea igual al número de filas de la matriz B. Por ejemplo, observa la figura 1.

Figura 1, Ejemplo de matrices multiplicables
La matriz A es una matriz de 2 x 3, en tanto que la matriz B es de 3 x 2. Estas matrices pueden multiplicarse puesto que el número de columnas de A es 3 y es igual al número de renglones de B, el cual es 3. Entonces se dice que A y B son matrices multiplicables entre sí y que su producto C será una matriz de r1 x c2, en este caso, de 2 x 2.
Propiedades de la multiplicación de matrices.
Así como la multiplicación de escalares, el producto matricial también tiene ciertas propiedades matemáticas:
Propiedad Asociativa
El producto de matrices es asociativo, pues:
A x (B x C) = (A x B) x C
En donde A, B y C son matrices multiplicables.
Propiedad del elemento neutro
Existe una matriz I denominada matriz identidad, del mismo orden que la matriz A tal que:
A x I = A
En la figura 2 se observan ejemplos de matrices identidad.

Figura 2. Ejemplos de matriz identidad
Propiedad Distributiva
El producto matricial es distributivo con respecto a la suma, ya que, si A, B y C son matrices multiplicables entre sí, se cumple que:
A x (B + C) = A x B + A x C
No conmutativa.
A diferencia de la multiplicación entre escalares, la multiplicación de matrices no es conmutativa, aun cuando dos matrices sean multiplicables entre sí. Es decir:
A x B ≠ B x A
Para demostrar esta propiedad, observa la figura 3, en donde se ilustra la multiplicación entre las matrices A y B, y después entre B y A.

Figura 3. La multiplicación de matrices no es conmutativa.
La dimensión de la matriz A es 2 x 3, en tanto que la matriz B es de 3 x 2. Dado que el número de columnas de A (3) es igual al número de renglones de B (3), son matrices multiplicables, y generan la matriz C de 2 x 2. Pero al multiplicar B x A, el resultado es una matriz totalmente diferente a la generada entre A x B, tanto en los datos que contiene, como de su dimensión, la cual ahora es la matriz D de 3 x 3.
El proceso de multiplicar matrices.
En la figura 4 puedes observar una animación que describe el proceso de multiplicar dos matrices.

Figura 4. El proceso de multiplicación de matrices.
Como se aprecia, cada elemento de la matriz resultante se obtiene sumando los productos de cada dato del renglón i de la matriz A por cada dato de la columna j de la matriz B. El desglose de estas operaciones se muestra en la figura 5.

Figura 5. Desglosando la multiplicación de matrices.
Ahora en la figura 6 re-escribo este proceso, pero utilizando los índices correspondientes de cada elemento de las matrices A, B y la resultante C.

Figura 6. La multiplicación de matrices usando índices.
Como puedes deducir, lo importante ahora es descubrir un “patrón” en la forma en cómo se mueven los índices. Por eso es importante reconocer que el cálculo de un elemento de la matriz resultante no sucede todo al mismo tiempo. En un primer tiempo, calculamos el producto de A[0][0] * B[0][0], y en el siguiente tiempo se suma este producto con la segunda multiplicación: A[0][1] * B[1][0], y por último la acumulación de las sumas con la multiplicación del último elemento: A[0][2] * B[2][0]. Esto se ilustra con la animación de la figura 7.
![dodinGames - Proceso para obtener el elemento C[0][0].](https://dcodingames.com/wp-content/uploads/2017/02/animMult2.gif)
Figura 7. Proceso para obtener el elemento C[0][0].
Encontrando el primer índice.
Pese a que las multiplicaciones suceden en momentos diferentes, es posible encontrar un patrón en la forma en cómo los índices se mueven.

Figura 8. Encontrando el primer índice.
Observa la figura 8:
- He colocado tres cuadros de colores: verde, azul y amarillo, rodeando las operaciones de multiplicación. Con esto te recuerdo que estas operaciones suceden en tiempos diferentes, las operaciones en verde suceden primero, luego las del cuadro azul, y por último las del cuadro amarillo. Esto sucede por cada elemento de la matriz resultante C, por lo que cuando se calculan los elementos del renglon 1 de C las operaciones también suceden en tres tiempos, motivo por el cual también aparecen encerradas en los cuadros con los colores descritos.
- Además, resalto con un recuadro rojo los índices que se mantienen sin cambios. Estos corresponden con el índice de renglón de la matriz resultante C, y el índice de renglón de la matriz A. Incluso puedes ver como para calcular los elementos del renglón 1 de la matriz resultante C estos índicen cambian de 0 a 1, pero son exactamente estos mismos índices. Esto me indica que es un índice que se mueve muy lento, y que seguramente es controlado por un for externo. Le llamaré a ese índice i, y escribiré la operación de multiplicación así:
C[i][ ] = C[i][ ] + A[i][ ] * B[ ][ ]
Nota que he dejado en blanco los índices que aún no encuentro. Y que también repito C[i][] del lado derecho para ir acumulando la suma de los productos. Además, puedes ver que este índice irá de 0 hasta antes del número de renglones de la matriz A, en este caso, 0 y 1.
Encontrando el segundo índice.
Para encontrar el segundo índice he creado la figura 9:

Figura 9. Encontrando el segundo índice
Ahora fue más fácil encontrar este segundo índice. Como puedes ver, este índice se mueve más rápido que el primero, y coindice con el número de columnas de la matriz resultante, que también son las columnas de la matriz B, y que en este caso va desde 0 hasta 3. Con este descubrimiento, le llamaré a este índice j, y re-escribiré la operación de multiplicación así:
C[i][j] = C[i][j] + A[i][ ] * B[ ][j]
Encontrando el tercer índice.
Ahora sólo nos falta encontrar el tercer índice. ¿Tres índices? ¿Esto quiere decir que existirán tres ciclos for anidados?
Así es. Uno de los principales errores de los aprendices es creer que el proceso de multiplicación de matrices sólo requiere dos índices, pues se trata de arreglos 2d o de dos dimensiones. Pero por lo que hemos visto en los esquemas, los índices i, j no pueden cumplir el patrón del índice faltante, es decir, la forma y los tiempos en los que este índice cambia no es igual a la forma en que los índices i, j están cambiando.
Para ello, observa la figura 10.

Figura 10. Encontrando el tercer índice.
Como puedes apreciar, este tercer índice no tiene nada que ver con los índices i, j, pues su cambio es diferente, y de hecho, es más rápido que los otros dos. Puedes entender porqué cambia más rápido: observa como en los cuadros verdes tiene un mismo valor tanto en la matriz A como en la matriz B, pero como avanza rápidamente al ir a la operación del cuadro azul. Su movimiento va desde 0 hasta 2, es decir, desde 0 hasta el número de columnas de la matriz A que es también el número de columnas de la matriz B. E éste índice lo llamaré k.
Con esto, la operación completa quedaría escrita de la siguiente forma:
C[i][j] = C[i][j] + A[i][k] * B[k][j]
Por último, el método completo queda escrito de la siguiente forma:
public static int[][] multiplicacionMatrices ( int[][] a, int[][] b) { int[][] c = new int[a.length][b[0].length]; for (int i= 0; i<c.length; i++) for (int j=0; j<c[0].length; j++) for (int k=0; k<b.length; k++) c[i][j] = c[i][j] + a[i][k] * b[k][j]; return c; }
Notas finales.
- En el método que te presento, no se realiza la operación previa de verificar si las matrices A y B son multiplicables, ni tampoco se imprime la matriz resultante C.
- Observa como la matriz resultante C es construída, con las dimensiones:
- Número de renglones : El número de renglones de la matriz A
- Número de columnas: El número de columnas de la matriz B
- Observa que el límite de es el número de renglones de la matriz B.
Comparte el conocimiento
Hasta aquí termina mi contribución sobre la multiplicación de matrices.
¿Te gustó el artículo? ¿Te ha sido útil? No olvides compartirlo en tus redes sociales. Y recuerda que puedo ayudarte si escribes tus dudas en los comentarios.
Saludos, y ¡hasta la próxima entrada!
Genial y fantástico resumen.
Mucho mejor que el que hizo mis profesores.
Muchas gracias! Un saludo
Muy bueno, lo he entendido todo
Qué bien, para eso estamos
Vaya, muy útil, muchas gracias.
Vaya, muy útil, muchas gracias.
Gracias, que bueno que te sirvió
Excelente. Muy bien explicado. Funcionando 2021.
Muchas gracias, a la orden
Alan Juarez Fragoso
Alex Hernández Ríos, leído. Excelente información
Excelente información, GRACIAS!
Efrain Cruz Lobato
Daniel Sammuel Cuayahuitl Pérez 4°A DSM
Leído, ¡Gracias!
Juan Daniel González Vásquez 4 A DSM
william Aguilar Chacon
Leído Profesora
Daniel Fernandez Guarneros 4A DSM
Jose Gustavo Barrera Valerio 4A DSM