Ir ao conteúdo
  • Cadastre-se

Diogo Batista Costa

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

3
  1. 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 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.
  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).
  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

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...