viernes, 30 de diciembre de 2011

Multiplicación de matrices:





Multiplicación de matrices
Definición de matriz: En matemáticas, una matriz es un arreglo bidimensional de números, y en su mayor generalidad de elementos de un anillo. Las matrices se usan generalmente para describir sistemas de ecuaciones lineales, sistemas de ecuaciones diferenciales o representar una aplicación lineal (dada una base). Las matrices se describen en el campo de la teoría de matrices.

Pueden sumarse, multiplicarse y descomponerse de varias formas, lo que también las hace un concepto clave en el campo del álgebra lineal.
(Por wikipedia).

Mas informacion sobre multiplicacion de matrices aqui.

Hosting

Codigo:

//Autor: Rey Salcedo Padilla
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();
  }
  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));
 }

}


Comenta acerca del código.




Entrada destacada

Matriz de adyacencia para un grafo

"La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias."; aunque pa...