Jump to content
Sign in to follow this  
andreiaSilva

LAPLACE JAVA , HELP

Recommended Posts

andreiaSilva

e assim tenho um codigo em java para determinar o determinante de uma matriz por laplace.. o programa corre mas na da o devido resultado... gstava de saber se alguem m podia ajudar a descobrir o erro:

   private static int pedirLinhaOuColuna() {
        int resp, l, c;
        System.out.println("Quer aplicar a regra a uma linha ou a uma coluna? [se linha marque 1; se coluna marque 2]");
        resp = in.nextInt();
        if (resp == 1) {
            System.out.println("Qual?");
            l = in.nextInt();
            return l;
        } else {
            System.out.println("Qual?");
            c = in.nextInt();
            return c;
        }
    }

    private static int[][] eliminarLiCol(int[][] matriz, int l, int c, int lin, int col) {
        int aux;
        if (l != 0) {
            for (int i = 0; i < col; i++) {
                aux = matriz[l - 1];
                matriz[l - 1] = matriz[l][i + 1];
            }
            return matriz;
        } else {
            for (int i = 0; i < lin; i++) {
                aux = matriz[c - 1] = matriz[i + 1][c];
            }
            return matriz;
        }
    }

    private static int r2x2(int[][] ma) {
        int res;
        res = (ma[0][0] * ma[1][1]) - (ma[0][1] * ma[1][0]);
        return res;

    }

    private static int[] criarMatriz(int[][] matriz, int col, int lin, int l, int c) {
        int[] res = new int[20];
        int a;
        int[][] mA = new int[20][20];
        mA = eliminarLiCol(matriz, l, c, lin, col);
        if ((lin - 1) == 2 && (col - 1) == 2) {
            for (int i = 0; i < col; i++) {
                a = r2x2(mA);
                res = a;
            }
        } else if ((lin - 1) == 3 && (col - 1) == 3) {
            for (int i = 0; i < col; i++) {
                a = (mA[0][0] * mA[1][1] * mA[2][2]) + (mA[1][0] * mA[2][1] * mA[0][2])
                        + (mA[2][0] * mA[0][1] * mA[1][2]) - (mA[0][2] * mA[1][1] * mA[2][0])
                        - (mA[1][2] * mA[2][1] * mA[0][0]) - (mA[2][2] * mA[0][1] * mA[1][0]);
                res = a;
            }
        } else {
            for (int i = 0; i < col; i++) {
                a = detLaplace(mA, l, c, col, lin);
                res = a;
            }
        }

        return res;

    }

    private static int detLaplace(int[][] matriz, int l, int c, int col, int lin) {
        int det = 0, a;
        int[] res = new int[20];
        res = criarMatriz(matriz, col, lin, l, c);
        if (l != 0) {
            for (int i = 0; i < lin; i++) {
                for (int j = 0; j < col; j++) {
                    for (int k = 0; k < col; k++) {
                        a = (-1) * Math.getExponent(i + j);
                        det = det + (matriz[j] * a * res[k]);
                    }
                }
            }
        }
        return det;
    }

sei k e mt codigo mas agradecia a ajuda

bjos e Bom ano pa todos

Share this post


Link to post
Share on other sites
M6

Essa descrição é vaga mas parece-me indicar um erro de lógica no teu porgrama.

Faz debug passo-a-passo e segue o raciocinio de forma manual no papel (ou numa folha de cálculo) de forma a ver se o programa está a fazer o que deve em cada passo.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
SérgioMaia

ora bem, ao que parece tu estás na mesma escola, no mesmo curso, e no mesmo ano que eu :S

já que eu também estou a fazer este trabalho...

em relação á pergunta, a minha surpresa é tu dizeres que esse programa está a correr...

Posso estar enganado(já fiz alguns testes antes de escrever para comprovar o k digo) mas tu não podes nunca chamar arrays de duas coordenadas com apenas uma coordenada.

por exemplo ao escreveres isto : "matriz[l - 1] = matriz[l];" não devia correr o programa já que daria erro de imcompatibilidade de tipos...

mesmo que quisesses imprimir um valor dum elemento da matriz ex m[1][0]=2, se fizeres "System.out.println(m[1]);" vai dar-te um numero que tu não pretendes!

Por acaso, o teorema de laplace é um dos poucos que me está a dar valente luta xD  :wallbash: por isso vou tentar ver melhor o teu codigo e ver se tiro algumas ideias dele se tu não te importares ;)

Share this post


Link to post
Share on other sites
andreiaSilva

bem ao copiar pa aki copiou mal.. pq não era assim que estava.. mas ponto ja consegui resolver laplace

bigada na mesma

Share this post


Link to post
Share on other sites
SérgioMaia

Como tive dificuldades neste exercicio recorri a ajuda do docente responsavel por aprog, que me facilitou muitissimo a vida

ele disse-me que no teorema de laplace, segundo informações que ele tinha dadas pelo docente de ALGAN, o programa obrigatóriamente só necessita de fazer uma iteração... ou seja, se tiveres uma matriz de dimensão n x m só tens de transformar uma vez em n matrizes de n-1 x m-1. A partir dai podes usar qualquer metodo que queiras( no meu caso usei o determinante pelas propriedades, que resolve todos os determinantes, desde 1x1 a 20x20 :) )

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.