Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

kareka

Trabalhar com vectores (matemáticos) e vectores (programação)

Mensagens Recomendadas

kareka

Estou a desenvolver um programa em JAVA, tenho um problema e gostaria que alguém me ajudasse no seguinte:

Tenho um vector, por exemplo, do tipo: (x,y,2x-y,5x-y) ou (x,y,z,2y). Este vector está guardado numa string mas sem os "( )" .

No vector podem existir as letras x, y, z e w. O que eu preciso é, por cada letra, substituir, por exemplo:

x por 1 e todas as outras por 0

y por 1 e todas as outras por 0

.

.

.

Tenho é de ter em atenção os coeficientes das incógnitas para realizar as respectivas operações (multiplicar por 0 ou por 1, conforme o caso)

Tentei o seguinte apenas para o primeiro caso de substituir o "x por 1 e todas as outras por 0":

//neste caso estou a colocar na primeira posição do vector coord_copy as substituições, mas não realiza nenhuma operação

coord_copy[0] = coord_subespaco.replaceAll("x","1");
coord_copy[0] = coord_copy[0].replaceAll("y","0");
coord_copy[0] = coord_copy[0].replaceAll("z","0");
coord_copy[0] = coord_copy[0].replaceAll("w","0");

Agradeço desde já qualquer ajuda  :D


<?php include("assinatura.txt"); ?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vbmaster

Não percebi bem o que queres fazer, mas talvez uma representação matricial dos vectores te ajude, porque obteres o ponto em que o vector se encontra para umas dadas coordenadas (pareceu-me que era isso que querias) volve-se apenas em multiplicação de matrizes normal (fácil de implementar, basta googlares).

Esta seria por exemplo uma representação para o primeiro vector que apresentáste.

[x,y,z,w]' = [1  0 0 0]      * [x]
             [0  1 0 0]         [y]
             [2 -1 0 0]         [z]
             [5 -1 0 0]         [w]

Para obteres o vector que apresentáste iteras cada linha da matriz quadrada (à esquerda do *), para cada linha iteras os seus elementos. Ao mesmo tempo que iteras os elementos de uma linha, iteras os elementos da matriz coluna da direita (1 com x, 0 com y, 0 com z, 0 com w). Cada valor da esquerda multiplica pelo da direita e somas os vários elementos. Ou seja.

Linha 1: 1*x + 0*y + 0*z + 0 * w = x

...

Linha 3 : 2*x + (-1)*y + 0*z + 0*w = 2x-y

Agora, se em vez dos x's na direita tiveres esses valores númericos 0 e 1, implementas o que queres apenas alterando valores em arrays e correndo de novo o algoritmo de multiplicação da matriz.

A único pormenor que falta é construires a matriz quadrada do vector, mas isso também é fácil.

Mas se calhar fui dar uma grande volta e estou-te a complicar o problema imenso... não sei.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kareka

Complicar ou não , já tentaste ajudar e agradeço por isso . Até porque o prazo deste trabalho já aperta .

Percebi o que querias dizer , mas penso que não se adapte bem ao meu programa .

Desde o inicio: o utilizador insere um certo numero de vectores com 4 coordenadas e no máximo 4 vectores, depois tenho um método que condensa a matriz gerada pelos vectores (ou seja passa todos os elementos abaixo da diagonal principal a 0). A partir de tudo isto, são geradas condições que é nestas depois que eu tenho de realizar as tais operações.

Por exemplo:

Vectores inseridos: (1,2,3,4) e (5,6,7,8)
Matriz gerada: [1  5]  [x]
               [2  6]  [y]
               [3  7]  [z]
               [4  8]  [w]

Matriz condensada: [1  5]  [x]
                   [0  1]  [y-2x/-4]
                   [0  0]  [z-3x+8(y-2x/-4)]
                   [0  0]  [w-4x+12(y-2x/-4)]

Condições: z-3x+8(y-2x/-4)=0
                  w-4x+12(y-2x/-4)=0

O utilizador insere agora as coordenadas do subespaço: [x,y,3x-8(y-2x/4),4x-12(y-2x/4)]
Na expressão acima (apesar de confusa) tenho de substituir o x e o y por 1 e 0 e depois por 0 e 1.

Actualização de código:

//para subtituir x por 1 e todas as outras por 0
        for(p=0; p<4; p++) {            
            if(coordenadas[p].length()==1) {
                if(coordenadas[p].equals("x")) coord_copy[p] = "1";
            } else {
                ax = coordenadas[p].toCharArray();
                for(j=0; j<ax.length; j++) {                    
                    switch(ax[j]) {
                        case '1':
                        case '2':
                        case '3':
                        case '4':
                        case '5':
                        case '6':
                        case '7':
                        case '8':
                        case '9':
                        case '0': n1 = (String) (n1 + ax[j]);
                                  ax[j] = ' ';
                                  break;
                        case 'x': if(n1.equals("")) {
                                    ax[j] = '1';
                                  } else {
                                    elm = n1.toCharArray();
                                    for(int g=0; g<elm.length; g++) {
                                        el = (char) (el + elm[g]);
                                    }
                                    ax[j] = el;
                                  }
                                  n1 = "";
                                  n2 = "";
                                  el = ' ';
                                  break;
                        case 'y':
                        case 'z':
                        case 'w': ax[j] = '0';
                                  n1 = "";
                                  n2 = "";
                                  el = ' ';
                                  break;
                        default: fail=1;
                                 break;
                   }
                }
                for(int b=0; b<ax.length; b++) {
                    coord_copy[p] = coord_copy[p] + ax[b];
                }
            }
        }
        base[0] = coord_copy[0] + "," + coord_copy[1] + "," + coord_copy[2] + "," + coord_copy[3];
        base[0] = base[0].replaceAll(" ", "");


<?php include("assinatura.txt"); ?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.