Multiplicar matrices en Java

24/Jul/2015 Java , , , 9 Comentarios

Ya hemos visto en otros ejemplos como podemos sumar una matriz en Java o como podemos restar dos matrices con Java. En este caso vamos a dar un paso más y vamos a ver como podemos multiplicar matrices en Java.

La multiplicación de matrices en Java es un poco más compleja. Pero solo por la mera forma de lo que significa una multiplicación.

Y es que para multiplicar matrices lo que se realiza es una multiplicación de las filas por las columnas. Gráficamente sería algo así:

multiplica_matrices
Imagen gracias a Maths is Fun

Además tenemos que saber que para poder multiplicar matrices, las columnas de la primera matriz y las filas de la segunda matriz deben de ser las mismas, ya que si no no podremos realizar la multiplicación.

La matriz resultado será del tamaño de las filas de la primera matriz, por las columnas de la segunda matriz.

Pues con esta pequeña descripción de la teoría de la multiplicación de matrices vayamos a ver cómo podemos multiplicar matrices en Java.

Lo primero será definir nuestras dos matrices en Java:

  1. int[][] m1 = {{1,0,2},{-1,3,1}};
  2. int[][] m2 = {{3,1},{2,1},{1,0}};

Ahora, a fin de que el ejemplo quede más didácticamente entendible vamos a crear variables con las filas y columnas de las matrices.

  1. int fil_m1 = m1.length;
  2. int col_m1 = m1[0].length;
  3.  
  4. int fil_m2 = m2.length;
  5. int col_m2 = m2[0].length;

No es necesario que crees estas variables en tu programa y lo mejor es que utilices el valor del atributo .length en cada uno de los casos.

Ahor pasamos con las comprobaciones. Hemos dicho que para poder multiplicar dos matrices en Java tienen que coincidir el tamaño de las columnas de la primera matriz con el tamaño de las filas de la segunda matriz.

  1. if (col_m1 != fil_m2)
  2. throw new RuntimeException("No se pueden multiplicar las matrices");

En caso de que no coincidan lanzaremos una RuntimeException.

Ahora pasamos a crear la matriz resultado. Esta tendrá un tamaño de las filas de la primera matriz con las columnas de la segunda matriz.

  1. int[][] multiplicacion = new int[fil_m1][col_m2];

Ya tenemos todo preparado para poder empezar a multiplicar las matrices. Para realizar la multiplicación vamos a apoyarnos en un bucle anidado que recorra la matriz multiplicación y la rellene.

  1. for (int x=0; x < multiplicacion.length; x++) {
  2. for (int y=0; y < multiplicacion[x].length; y++) {
  3. ...
  4. }
  5. }

Para rellenarla hay que considerar que las multiplicaciones son de filas por columnas.

0,0  ->  0,0*0,0 + 0,1*1,0 + 0,2*2,0
0,1  ->  0,0*0,1 + 0,1*1,1 + 0,2*2,1
1,0  ->  1,0*0,0 + 1,1*1,0 + 1,2*2,0
...

Es decir necesitamos un nuevo bucle que recorra la columna de la matriz1 y la fila de la matriz2 multiplicando y sumando sus valores.

Así nuestro nuevo bucle quedará de la siguiente forma:

  1. for (int x=0; x < multiplicacion.length; x++) {
  2. for (int y=0; y < multiplicacion[x].length; y++) {
  3. for (int z=0; z<col_m1; z++) {
  4. multiplicacion [x][y] += m1[x][z]*m2[z][y];
  5. }
  6. }
  7. }

De esta forma ya tenemos el código que nos permite multiplicar matrices en Java.

Vídeos sobre Java


9 comentarios en “Multiplicar matrices en Java”

Víctor Cuervo

enrique

necesito una matriz de 5×5 que imprima una nueva de 5×5

Víctor Cuervo

Manuel Jose

Se tiene 2 matrices de 3 x 3, se pide intercambiar los valores de sus primeras columnas. ayuden xfis

Víctor Cuervo

Joaquin

Muy bueno gracias.

Víctor Cuervo

joaquin

nesesito hacer esto mismo pero con un constructor….
el constructor debe de leer el tamaño de de las matrizes retornarlas para que el principal lo defina…

Víctor Cuervo

diego fern velasc

puedes pedir dato para dimensionar la matrices que quieras, solo pide dato por ejemplo

Scanner sc = new Scanner(System.in);
//pido tamaño de la matriz
System.out.print(“columnas: “);
int n= sc.nextInt();
System.out.print(“filas: “);
int m= sc.nextInt();

int [][] matriz = new int [n][m]; //en esta parte ya quedara dimensionada la matriz con el valor que le ingreses en filas y columnas.

en el ejemplo que se muestra en linea de código ya le están definiendo la dimensión, esto es solo para una sola matriz, pero lo puedes re escribir para definir tu segunda matrices. ya la estructura quedara acorde la quieras programar, solo es un ejemplo.

Víctor Cuervo

Lisbeth Nuñez

Necesito multiplicar una matriz nxm y una mxk no tengo valores. Cómo lo hago? Ayuda!

Víctor Cuervo

Víctor Cuervo

Lisbeth, el código lo tienes arriba. ¿Qué es lo que no te cuadra? ¿Los valores tienes que pedirlos?

Saludos.

Víctor Cuervo

diego fern velasc

”Asignarle valor a la matrices” puedes primero dale a dimensiones a la matriz o pedir dato para dale el tamaño de filas y columnas. para llenar la matriz (asignarle valor) primero como algo obsoleto puedes usas el System.out.print(“) para decirle que llene la matrizA, luego usas un Scanner leer = new Scanner(System.in); esto te servirá para llenar la matriz sin que se pierdan los datos, luego solo usas el siclo que recorrerá la veces asignada por ti

//Llenar la matriz
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
matriz [i][j]= leer.nextInt();
}
System.out.print( " "+"\n");
}
ese es un ejemplo, solo te quedaría imprimirle. ''arriba esta como multiplicar matrices''.

Víctor Cuervo

Manuel Jose

el for en la manera como consiges la secuencia esta mal y el mensaje del System tambn esta mal manden bn los problemas

Responder a diego fern velasc Cancelar respuesta

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*