Buenas noches.
Te paso el codigo que siempre eh utilizado para la multiplicacion de matrices.
class MultiplicacionMatrices{
//Me extrae una fila dada de una matriz en forma de vector (arreglo)
public static int []filaMatriz(int [][]matriz, int fila){
int []arregloAuxiliar = new int[matriz[fila].length];
for(int i = 0; i < arregloAuxiliar.length; i++){
arregloAuxiliar[i] = matriz[fila][i];
}
return arregloAuxiliar;
}
//Me extrae una columna dada de una matriz en forma de vector (arreglo)
public static int []columnaMatriz(int [][]matriz, int columna){
int []arregloAuxiliar = new int[matriz.length];
for(int i = 0; i < arregloAuxiliar.length; i++){
arregloAuxiliar[i] = matriz[i][columna];
}
return arregloAuxiliar;
}
//Me devuelve el valor de una celda segun la multiplicacion de dos matrices
public static int valorCelda(int [][]matrizA, int [][]matrizB, int fila, int columna){
int suma = 0;
/*
Tomo la fila de la primera matriz y la columna de la segunda matriz,
para posteriormente multiplicar celda por celda
*/
int []filaMatrizA = filaMatriz(matrizA, fila);
int []columnaMatrizB = columnaMatriz(matrizB, columna);
for(int i = 0; i < filaMatrizA.length; i++){
/*
* Aqui valido que la longitud de ambos vectores sean iguales,
* en terminos mas acordes, que el numero de columnas de la primera matriz,
* sea igual al numero de filas de la segunda matriz
*/
if(filaMatrizA.length == columnaMatrizB.length){
suma += filaMatrizA[i] * columnaMatrizB[i];
}else{
System.
out.
println("El numero de columnas de la primera matriz es diferente al numero de filas de la segunda matriz"); break;
}
}
return suma;
}
//Me devuelve una matriz, producto de la multiplicacion de dos matrices
public static int [][]multiplicacionMatriz(int [][]matrizA, int [][]matrizB){
int [][]matrizAuxiliar = new int[matrizA.length][matrizA[0].length];
for(int i = 0; i < matrizA.length; i++){
for(int j = 0; j < matrizA[i].length; j++){
matrizAuxiliar[i][j] = valorCelda(matrizA, matrizB, i, j);
}
}
return matrizAuxiliar;
}
//imprime los valores de una matriz
public static void imprimirMatriz(int [][]matriz){
System.
out.
println("-------------------------------"); for(int i = 0; i < matriz.length; i++){
for(int j = 0; j < matriz[i].length; j++){
System.
out.
print(matriz
[i
][j
]+"\t"); }
}
System.
out.
println("-------------------------------"); }
//imprime el procedimiendo de la 'matriz de recorrido' de una matriz
public static void main
(String []args
){ /*
Nota importante:
- Sean las matrices A y B; A tenga el mismo número de columnas que B de filas para que exista A*B
- Sean las matrices B y A; B tenga el mismo número de columnas que A de filas para que exista A*B
*/
int [][]matrizA ={{1,0,0,1},
{1,4,0,1},
{1,9,0,11},
{1,5,6,0}};
int [][]matrizB ={{11,0,0,1},
{1,8,0,1},
{0,9,0,5},
{1,7,6,0}};
System.
out.
println("Matriz A"); imprimirMatriz(matrizA);
System.
out.
println("Matriz B"); imprimirMatriz(matrizB);
System.
out.
println("Matriz A * Matriz B"); imprimirMatriz(multiplicacionMatriz(matrizA,matrizB));
//Note que si A y B son diferentes A*B diferente de B*A (A*B <> B*A)
System.
out.
println("Matriz B * Matriz A"); imprimirMatriz(multiplicacionMatriz(matrizB,matrizA));
}
}
Espero te sirva!
Mod: Los códigos deben ir en etiquetas GeSHi