Buscar este blog

miércoles, 13 de febrero de 2013

La inversa de una matriz de 3x3 para Netbeans

El día de hoy quiero compartir un código que se sale un poco del contexto de dominz pero que igualmente es muy valido para desarrollar habilidades para tener en cuenta a la hora de programar, no sabia casi de arreglos, por lo que con estudio y esfuerzo he concluido con este proyecto el cual me presento muchas dificultades a la hora de hacerlo pero finalmente lo hice y esta comprobado, el código arroja el determinante de la matriz de 3x3 y luego nos da como resultado la matriz adjunta de la transpuesta, por lo que si multiplico 1/determinante por la matriz adjunta de transpuesta me quedara la matriz inversa con números de coma flotante, por lo que tome la decisión de dar el resultado de la matriz y el determinante separados para mayor facilidad en los cálculos  a continuación el código.



package inversa;
import java.util.Scanner;

public class Inversa {

 
    public static void main(String[] args) {

     Scanner calculadora;
     calculadora = new Scanner(System.in);
   
   int i,vec=0,se,s,co,q,y,j;
   int w,t,x,z,conta,so,sc,de=0,web=0;

  int matriz2[][];
   int matriz[][];
   matriz2=new int[3][3];
   matriz=new int[3][3];

   for(i=0;i<=2;i++){
       for(j=0;j<=2;j++){
           System.out.print("numero matriz"+"("+i+"-"+j+")");
            matriz[i][j]=calculadora.nextInt();
         
       }
   }
       i=0;
      for( j=0;j<=2;j++){
            co=0;
            se=1;
            s=1;
             for(int k=1;k<=2;k++){
               for(int m=0;m<=2;m++){
                   
               
                if( m!=j){
                   co=co+1;
                if(co==1 || co==4){
                   se=se*matriz[k][m];
                }
                if(co==2 || co==3){
                   s=s*matriz[k][m];
            }
        if(i+j==1){
          vec= -(se-s)*matriz[i][j];
        }
        if(i+j!=1){
          vec= (se-s)*matriz[i][j];
        }
   
                }
           }
       }
        web=vec+web;
  }
   
    for(q=0;q<=2;q++){
        for(y=0;y<=2;y++){
           matriz2[q][y]=matriz[y][q];
        }
       
    }
 System.out.println("determinante de la matriz es "+web);

    System.out.println("la matriz adjunta de la transpuesta ");

           for(w=0;w<=2;w++){
              for(t=0;t<=2;t++){
       
              conta=0;
              so=1;
              sc=1;
               
           for(x=0;x<=2;x++){
                 for(z=0;z<=2;z++){
               
              if(x!=w && z!=t){
                   conta=conta+1;
                   
                    if(conta ==1  || conta==4){
                       so=so*matriz2[x][z];
                   }
                    if(conta ==2  || conta==3){
                        sc=sc*matriz2[x][z];
                   }
                   
                    if(w+t==1 || w+t==3){
                        de = -(so-sc);
                  }
                  if((w+t)%2==0){
                        de=(so-sc);
                  }
               }
             }
          }
        System.out.print("("+de+")"+",");
      }
    }
  }
}

5 comentarios:

  1. hola gracias excelente codigo me ha funcionado de maravilla pero por mas que le doy vueltas no logro determinar el porque las variables o que es lo que haces en cada ciclo for, me podrias explicar? te lo agradeceria mucho

    ResponderEliminar
    Respuestas
    1. Hola Dorian, probablemente ya cerraste tu bachillerato o Ingenieria en Sistemas, pero yo tampoco sé :v

      Eliminar
  2. amigo, y si yo lo quiero implementar para una matriz de tamaño n*n, que le tendría que modificar, o definitivamente este código no soportaría ese cambio?
    Muchas gracias.

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar