Java. Ejemplo de Matriz Adjunta de una Matriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import java.io.*; /** * * @author masar */ public class CEntDatos { public static String inicial ( ) { String datointroducido = "" ; try { // Definimos un flujo de caracteres de entrada. InputStreamReader flujo= new InputStreamReader ( System.in ); // Creamos un objeto de esta clase que almacenará la información en un bufer. BufferedReader teclado = new BufferedReader ( flujo ); // Introducimos la entrada y la asignamos a una variable. datointroducido = teclado .readLine(); } catch (IOException e){ System.err .print ( "Error: " + e.getMessage ( ) ); } return datointroducido ; } //------------------------------------------------------------------------ public static int entero( ) { try { return Integer.parseInt( inicial( ) ); } catch ( NumberFormatException e ) { return Integer. MIN_VALUE; // valor más pequeño. } } //------------------------------------------------------------------------ public static double real( ) { try { return Double.parseDouble ( inicial( ) ); } catch ( NumberFormatException e ) { return Double. NaN; // No es un número. } } //------------------------------------------------------------------------ public static String cadena() { return inicial( ); } //------------------------------------------------------------------------ static char caracter() { String valor= inicial(); return valor.charAt(0); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | package matrizadjunta; /** * * @author codesitio.com */ public class MatrizAdjunta { private static String[][] tablaTrasp; public static void main(String[] args) { int tablaA[][]=new int[3][3]; int tablaAdjun[][]=new int[3][3]; int elemen; //introducimos números en la Matriz A System.out.println("Introduce los números en la Matriz A:"); for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ System.out.print("Fila "+(i+1)+" Columna "+(j+1)+" = "); tablaA[i][j]=CEntDatos.entero(); } } System.out.println(""); //Mostramos los números introducidos System.out.println("Esta es la matriz introducida:"); System.out.println(""); System.out.println("MATRIZ A"); System.out.println("-----------"); for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ System.out.print(tablaA[i][j]+" "); if(j==2){ System.out.println(""); } } } //CALCULO DE ADJUNTOS tablaAdjun[0][0]=(tablaA[1][1]*tablaA[2][2]) - (tablaA[1][2]*tablaA[2][1]); tablaAdjun[0][1]=-((tablaA[1][0]*tablaA[2][2]) - (tablaA[1][2]*tablaA[2][0])); tablaAdjun[0][2]=(tablaA[1][0]*tablaA[2][1]) - (tablaA[1][1]*tablaA[2][0]); tablaAdjun[1][0]=-((tablaA[0][1]*tablaA[2][2]) - (tablaA[0][2]*tablaA[2][1])); tablaAdjun[1][1]=(tablaA[0][0]*tablaA[2][2]) - (tablaA[0][2]*tablaA[2][0]); tablaAdjun[1][2]=-((tablaA[0][0]*tablaA[2][1]) - (tablaA[0][1]*tablaA[2][0])); tablaAdjun[2][0]=(tablaA[0][1]*tablaA[1][2]) - (tablaA[0][2]*tablaA[1][1]); tablaAdjun[2][1]=-((tablaA[0][0]*tablaA[1][2]) - (tablaA[0][2]*tablaA[1][0])); tablaAdjun[2][2]=(tablaA[0][0]*tablaA[1][1]) - (tablaA[0][1]*tablaA[1][0]); //MATRIZ ADJUNTA System.out.println("la Matriz Adjunta de la Matriz A es: "); for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ System.out.print(tablaAdjun[i][j]+" "); if(j==2){ System.out.println(""); } } } } } |
En este ejemplo mostramos una forma sencilla de calcular la Matriz Adjunta de una matriz 3×3 dada. Crear un algoritmo eficiente para calcular cada adjunto resultaria mas confuso que hayar cada adjunto de forma directa como se ha hecho.
En el caso de matrices de 3×3 dimensiones se calcula cada adjunto correspondiente a cada elemento de la matriz de la siguiente manera:
Si queremos calcular el adjunto del primer elemento situado en la fila 0, columna 0, cojeriamos de arriba a abajo y de izquierda a derecha el resto de valores de los elementos de la matriz que no esten en la fila 0 ni en la columna 0 y formariamos una matriz nueva de 2×2, de la cual hayariamos su determinante.
El paso anterior lo repetiriamos con cada uno de los elementos de la matriz dada, teniendo muy presente las filas y columnas que correspondan omitir.
Otra cuestión importante y que no hay que olvidar es la de anteponer si corresponde el signo negativo (-) al adjunto del elemento de la matriz que este situado en posicion impar, es decir los elementos de la matriz situados en la misma en las posiciones 1,3,5,7 y 9.
En este ejemplo se ha empleado una matriz de 3×3 dimensiones, pero no resulta demasiado complicado adaptar el programa a matrices de mayor dimensión, eso si, cuanto mas grande sea la matriz, mas costará calcular los adjuntos de cada elemento de la matriz. Por ejemplo si aumentamos tan solo en una fila y una columna la matriz de 3×3 dejándola en una matriz de 4×4, ya tenemos que calcular determinantes de 3×3 en vez de 2×2, con lo cual la complejidad va aumentando considerablemente.
No descarto intentar mejorar o hayar un algoritmo que pueda servir o ayude a calcular matrices adjuntas de mayor dimensión, me lo apunto como tarea pendiente, pero como primer acercamiento este ejemplo puede servir.