Ir ao conteúdo
  • Cadastre-se

Diogo Batista Costa

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

posts postados por Diogo Batista Costa

  1. Em 15/10/2018 às 20:34, devair1010 disse:

    @Diogo Batista Costa    qual o enunciado desse exercício ?  ,      o que o programa deve fazer ?     rodei seu código e ele apresenta erros que consegui acertar e ele roda mas não apresenta nenhuma informação para saber para que serve .

     O Devair Agradeço por ter ajudado :D, acabei conseguindo resolver o Problema fiz o seguinte. Como tinha a Matriz_a[][] com os valores inicialmente indicados e eu precisava alterar o valor de cada linha sem alterar então criei uma matriz Auxiliar muita[][] com os valores de matriz_a[][]  e fiz todos os calculos necessários. No Final dos comandos atribui muita[][] = matriz_a[][] para ficar com os valores de A novamente. Em questão do " - 1 " como eu fiz esse método não precisou utilizá-lo.

     

    Agradeço grandemente pela Ajuda. Jesus Abençoe :D

     

    PS: Assim que Terminar deixo o Código todo Disponível lá para quem quiser Utilizar. A ideia é Calcular a Matriz pelo método iterativo de GAUSS SEIDEL e JACOBBI.

    • Obrigado 1
  2. O Devair Obrigado por ajudar a função desse programa é calcular uma matriz quadrada utilizando o método de Gauss Seidel. Ele funciona da Seguinte forma: (Peço Até desculpas no programa deixei algumas coisas escritas erradas kk).

     

    Ele pega os valores de uma Matriz A e uma Matriz B  e transforma em uma matriz Aumentada  ficando no formato [ A | B ].  Depois ele cria uma matriz que chamamos de Matriz Inicial X ().

     

    Ele faz Respectivamente o Seguinte, 

     

    Matriz A =   { 1, 2 , 3, 4 }         Matriz B= { 5, 6  }       Matriz X = { 1, 8}

      x¹         x²     =  B                              X     

     x ¹   +   2x²    = 5                              | 1 | ¹
    3x¹   +   4x ²   = 6                              | 8 | ²

     

    Ele Multiplica todos os números que não estão na diagonal que é o 2 e o 3 por -1. Em seguida multiplica por seu X equivalente ficando assim:

     

    X¹  = B + ( - 2x²)              x² = 8

    X¹ =   5 + ( - 2. 😎 / 1     /// este 1 está na diagonal acompanhando o x¹

    X¹ =   5 - 16

    X¹ = -11

     

    X² = B ( - 3.x¹)      x¹ = 1

    x² = 6 +( - 3.1 )  / 4        /// Esse quatro está na diagonal acompanhando o x²

    X² =   3 / 4

    X² =  0.75 

     

    Aqui tenho valor de X¹ = 80 e de X² = 4.5.

    Peço muitas desculpas explicar Assim foi a melhor maneira :( . 

     

    onde é o valor de 1 e 8 troca agora por esses valores de 80 e 4.5. Até aqui Tudo bem ,o programa está fazendo corretamente. Aí ele vai e faz o processo novamente porém ele não reconhece o  -1. Por que ? se ele gera a primeira linha a matriz fica Assim :

    1     - 16      =  5

    -3   +  4       =  6  

    Quando ele fizer a segunda interação deveria ficar assim:

    1       -12      =  5

    33   +  4       =  6  

    Com o Sinal de menos onde era o -12 e 33 positivo. porque se ele não ficar dá diferença no próximo resultado.. Parece que ele inverte os sinais.

     

    Fiz um exercício na mão utilizando a matriz 

    Matriz A =   { 1, 2 , 3, 4 }         Matriz B= { 5, 6  }       Matriz X = { 1, 8}

    https://photos.app.goo.gl/GqGYxMzyLxE1EKmv6

     

    Vê como ela fica. 

     

    Observação ela repete os mesmos passos porque a matriz calcula uma distancia que tem que ser menor que a tolerância informada, geralmente a tolerância é 0.05.(Não sei se isso Ajuda um pouco).

     

     

     

     

     

     

     

     

     

    • Curtir 1
  3. Galera Boa tarde Estou com um problema no meu código e queria pedir ajuda. Criei pelo C++ Uma matriz Utilizando GAUSS SEIDEL, Porém  quando compilo ele faz a primeira Interação Corretamente, quando Chega na segunda interação os valores não estão corretos.

    na linha 129  do meu programa ele multiplica todos os valores da linha por -1 e seu respectivo valor da matriz inicial. A Diagonal principal fica intacta; isso você pode comprovar na hora que aparece a matriz na tela de acordo com a interação feita.

    Na interação 2  essa linha 129 não multiplica os valores por -1; 
    Na interação 3 parece que volta ao normal.

    Como esse é meu primeiro tópico não sei se postei no local correto e se estou compartilhando o link correto. Coloquei meu código no GitHub.

    Se puderem Ajudar agradeço muito 😃  

    Ps: Se o código estiver muito sujo, com conteúdo em excesso, aceito ajuda para retirar algo 😉 .

    Foto da tentativa: https://drive.google.com/file/d/1M3MeIVw1sOPO__RiB1PzXm9s4gPoM_3_/view?usp=sharing


    https://gist.github.com/Diogoislim/d0bbb698037eac548f470f379ec24bd6

     

      ///---- MÉTODO DE CÁLCULO
        void gauss_seidel(){
    
          float valorDeX[100] = {0};
         // float x_final[100] = {0};
          float x_nova[100] = {0};
          float somarLinhaX[100] = {0};
          distancia = 0;
          interacao =0;
    
         do{
              somarLinha =0;
              interacao += 1;
              cout << " ---------------"" Interacao: " << interacao << " ---------------" << endl;
              for(int i=1; i<= ordem; i++){
                for(int j=1; j<=ordem; j++){
                    if(j == i){
                        matriz_a[i][j] = matriz_a[i][j];
                    }else{
                        primeiroCalculo = ((-1) * (matriz_a[i][j]) * (matriz_x[j])); // MULTIPLICA OS TERMOS POR -1  E PELO X
                        matriz_a[i][j] = primeiroCalculo;
                        somarLinha += matriz_a[i][j];
                    }
    
                string condicao = (j <  ordem ) ?  " | ": " |  "; // SOMENTE FOMATACAO
                cout << matriz_a[i][j] << condicao;
                }
                cout << matriz_b[i] << endl;
                somarLinhaX[i] = somarLinha;
                valorDeX[i] = ((1 / matriz_a[i][i]) * (matriz_b[i] + somarLinhaX[i]));
                somarLinha = 0;
                x_nova[i] = valorDeX[i]; // x_nova É SOMENTE PARA GUARDAR O VALORDEX PARA DEPOIS TRANSFORMAR EM MATRIZ_X
            }
            cout << endl;
    
    
            for(int k=1; k<=ordem; k++){
                printf("x[%d] = 1/%0.1f * (%f + (%f)) ) = %f \n",k, matriz_a[k][k], matriz_b[k], somarLinhaX[k], valorDeX[k]);
            }
            cout << endl;
            distancia = calcular_distancia_seidel(valorDeX, matriz_x); // ValorDX = MATRIZ K + 1 E Matriz_x = MATRIZ K
    
            for(int m=1; m<=ordem; m++){
             matriz_x[m] = x_nova[m];
            }
    
            system("pause");
            cout << endl;
    
         }while(tolerancia < distancia);

     

    deixei o GITHUB porque está grande o código :D

    • Curtir 1

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!