Matrices 2: Operaciones con Matrices – Parte I

 

En esta ocasión realizaremos la suma, resta y multiplicación de matrices. Para este ejercicio es necesario entender como funcionan dichas operaciones matemáticamente.

Suma de Matrices

 

La suma de matrices solo se puede realizar entre matrices de la misma dimensión, es decir, las mismas filas y las mismas columnas, por consiguiente la matriz resultante tiene las mismas dimensiones. La suma se efectúa en cada uno de los elementos correspondiente a cada matriz en su posición actual, es decir, se sumará la posición mat1[0,0] con la posición mat2[0,0] y el resultado se guardara en mat3[0,0].

suma de matrices

 

Deberemos declarar tres matrices de m x n (recordar que las 3 matrices deben tener el mismo número de filas y columnas así que se pedirá sólo 1 sola vez al usuario) .

int filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de las matries"));
int columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de las matrices"));
int matrizA[][]=new int[filas][columnas];
int matrizB[][]=new int[filas][columnas];
int matrizRes[][]=new int[filas][columnas];

Muy bien, ahora pedimos guardar los datos tanto en la matrizA como en matrizB.

 

 

Nota: No hay necesidad de pedir datos a matrizRes ya que se generaran los datos con la suma.

//Escribir datos en la matrizA
System.out.println("Datos de la Matriz A:");
for(int i=0;i<filas;i++){
        for(int j=0;j<columnas;j++){
                matrizA[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz A"));
                System.out.print(matrizA[i][j]+" ");
        }
        System.out.println();
}

//Escribir datos en la matrizB
System.out.println("Datos de la Matriz B:");
for(int i=0;i<filas;i++){
        for(int j=0;j<columnas;j++){
                matrizB[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz B"));                            
                System.out.print(matrizB[i][j]+" ");
        }
        System.out.println();
}

 

Por último realizamos la suma y la guardamos en matrizRes.

System.out.println("Suma de las dos matrices:");
for(int i=0;i<filas;i++){
        for(int j=0;j<columnas;j++){
                matrizRes[i][j]=matrizA[i][j]+matrizB[i][j];                            
                System.out.print(matrizRes[i][j]+" ");
        }
        System.out.println();
}

 

El resultado sera el siguiente:  

Resta de Matrices

 

La resta de matrices es similar a la suma, se cumplen las mismas reglas de que deben tener las mismas dimensiones, a diferencia de la suma, ésta se deben de restar, Ejemplo.

resta de matrices

 

El código es el mismo que la suma a excepción de que se resta en lugar de sumar.

System.out.println("Resta de las dos matrices:");
for(int i=0;i<filas;i++){
        for(int j=0;j<columnas;j++){
                matrizRes[i][j]=matrizA[i][j]-matrizB[i][j];                            
                System.out.print(matrizRes[i][j]+" ");
        }
        System.out.println();
}

 

 el resultado es el siguiente:  

resultado resta

Multiplicación de Matrices

En la multiplicación de matrices cambia la forma de seguir las reglas, en esta ocasión se requiere que el número de columnas de la primera matriz sea igual al número de filas de la segunda matriz, o viceversa. En esta operación se multiplicará una matriz m x n por una matriz n x r, y la matriz resultante es de dimensión m x r.

 

 

Si tuviéramos una matriz de 2x3 y una de 3x2 la matriz resultante sería una matriz de 2x2.

A diferencia de la suma o de la resta, la operación de la multiplicación no es posición por posición, se realiza de la siguiente manera:

 

1.- Se toma la primera fila de la primera matriz y la primera columna de la segunda matriz, lo que se hace es multiplicar cada posición de la fila por cada posición de la columna, y sumar los valores resultantes de esas multiplicaciones.

 

 

2.- El resultado de esa suma se coloca en la primera posición de la matriz resultante.

(3*3) + (7*1) + (5*4) = 36

 

 

3.- En caso de haber mas filas se toma la segunda fila, pero se sigue multiplicando por la primera columna, se hace la respectiva multiplicación y suma de valores resultantes, el resultado se guarda en la matriz resultante en la posición correspondiente.  

 

4.- Si hay más columnas se repite el proceso desde el punto 1, a diferencia que las multiplicaciones se harán sobre la columna 2 de la segunda matriz.

Hasta tener nuestra matriz resultante.

 

Para el código en java, en esta ocasión si es necesario pedir las filas y columnas en las dos matrices, y crear una tercera matriz con las filas de la primera matriz y las columnas de la segunda matriz.

int filasA=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas para la matriz A"));
int columnasA=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas para la matriz A"));
int matA[][]=new int[filasA][columnasA];
                
int filasB=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas para la matriz B"));
int columnasB=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas para la matriz B"));
int matB[][]=new int[filasB][columnasB];
                
int matRes[][]=new int[filasA][columnasB];

 

Se piden los datos para guardar en las matrices como los hemos pedido anteriormente.

//Escribir datos en la matrizA
System.out.println("Datos de la Matriz A:");
for(int i=0;i<filasA;i++){
        for(int j=0;j<columnasA;j++){
                matA[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz A"));
                System.out.print(matA[i][j]+" ");
        }
        System.out.println();
}

//Escribir datos en la matrizB
System.out.println("Datos de la Matriz B:");
for(int i=0;i<filasB;i++){
        for(int j=0;j<columnasB;j++){
                matB[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz B"));                               
                System.out.print(matB[i][j]+" ");
        }
        System.out.println();
}

 

Continuamos con el algoritmo para realizar la multiplicación ya explicada anteriormente.

System.out.println("Resultado: ");
                    
for ( int i = 0; i < filasA; i++){ 
        for ( int j = 0; j < columnasB; j++){
                for ( int k = 0; k < columnasA; k++ ){ //puede ser columnasA o filasB ya que deben ser iguales
                        matRes[ i ][j ] += matA[i][k]*matB[k][j];
                }
                System.out.print(matRes[i][j]+" ");
        }
        System.out.println();
}

Código completo utilizado

package pqtMatrices;

import javax.swing.JOptionPane;

public class MatrizOperaciones {

        public static void main(String[] args) {
                
                int filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de las matries"));
                int columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de las matrices"));
                int matrizA[][]=new int[filas][columnas];
                int matrizB[][]=new int[filas][columnas];
                int matrizRes[][]=new int[filas][columnas];
                
                //Escribir datos en la matrizA
                System.out.println("Datos de la Matriz A:");
                for(int i=0;i<filas;i++){
                        for(int j=0;j<columnas;j++){
                                matrizA[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz A"));
                                System.out.print(matrizA[i][j]+" ");
                        }
                        System.out.println();
                }

                //Escribir datos en la matrizB
                System.out.println("Datos de la Matriz B:");
                for(int i=0;i<filas;i++){
                        for(int j=0;j<columnas;j++){
                                matrizB[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz B"));                            
                                System.out.print(matrizB[i][j]+" ");
                        }
                        System.out.println();
                }
                                
                System.out.println("Suma de las dos matrices:");
                for(int i=0;i<filas;i++){
                        for(int j=0;j<columnas;j++){
                                matrizRes[i][j]=matrizA[i][j]+matrizB[i][j];                            
                                System.out.print(matrizRes[i][j]+" ");
                        }
                        System.out.println();
                }
                
                System.out.println("Resta de las dos matrices:");
                for(int i=0;i<filas;i++){
                        for(int j=0;j<columnas;j++){
                                matrizRes[i][j]=matrizA[i][j]-matrizB[i][j];                            
                                System.out.print(matrizRes[i][j]+" ");
                        }
                        System.out.println();
                }
                
                int filasA=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas para la matriz A"));
                int columnasA=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas para la matriz A"));
                int matA[][]=new int[filasA][columnasA];
                
                int filasB=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas para la matriz B"));
                int columnasB=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas para la matriz B"));
                int matB[][]=new int[filasB][columnasB];
                
                int matRes[][]=new int[filasA][columnasB];
                
                //if para verificar que se pueda realizar la multiplicación
                if(filasA==columnasB){
                        //Escribir datos en la matrizA
                        System.out.println("Datos de la Matriz A:");
                        for(int i=0;i<filasA;i++){
                                for(int j=0;j<columnasA;j++){
                                        matA[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz A"));
                                        System.out.print(matA[i][j]+" ");
                                }
                                System.out.println();
                        }

                        //Escribir datos en la matrizB
                        System.out.println("Datos de la Matriz B:");
                        for(int i=0;i<filasB;i++){
                                for(int j=0;j<columnasB;j++){
                                        matB[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz B"));                               
                                        System.out.print(matB[i][j]+" ");
                                }
                                System.out.println();
                        }
                        
                        System.out.println("Resultado: ");
                    
                        for ( int i = 0; i < filasA; i++){ 
                                for ( int j = 0; j < columnasB; j++){
                                        for ( int k = 0; k < columnasA; k++ ){ //puede ser columnasA o filasB ya que deben ser iguales
                                                matRes[ i ][j ] += matA[i][k]*matB[k][j];
                                        }
                                        System.out.print(matRes[i][j]+" ");
                                }
                                System.out.println();
                            }
                }else{
                System.out.println("Error las matrices no se pueden multiplicar, no se cumplen las reglas");
            }   
                
        }
        
}