Jump to content
Sign in to follow this  
kareka

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

Recommended Posts

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"); ?>

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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"); ?>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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.