Mostrando las entradas con la etiqueta Multiplicación de matrices. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Multiplicación de matrices. Mostrar todas las entradas

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...