-
Posts
3 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Diogo Batista Costa
-
-
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).
- 1
-
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
- 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
Matriz Utilizando Gauss Seidel C++
em C/C#/C++
Postado
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.