Ir ao conteúdo
  • Cadastre-se

Ítalo Elétrico

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Boa noite, galera! Eu estou com dificuldade na implementação do método de Gauss-Seidel em código C. Não tenho muita prática com programação e é essencial em Cálculo Numérico para Engenharia. A parte matemática é fácil de entender, o problema é o algoritmo, mesmo. Eu tenho de resolver esse sistema linear (na verdade qualquer um, mas estou começando por um caso particular antes de aperfeiçoar o código): 8x1 + 2x2 + 2x3 = 3 -1x1 + 4x2 - 4x3 = 3 1x1 - 2x1 + 6x1 = 8 #include <stdio.h>#include <stdlib.h>#include <math.h>// Constante de erro.#define erro = 0.001// "Delta de Kronecker" invertido. Retorna 1, se i != j, e 0, se i = j.int delta(int i, int j){ return (i != j) ? 1 : 0;}// Função principalint main(int argc, char*argv[]) { // Matriz de coeficientes. "3x3" float a[4][4] = {{0, 0, 0, 0}, {0, 8, 2, 2}, {0, -1, 4, -4}, {0, 1, -2, 6}}; // Vetor de resultados. "3" elementos. float b[4] = {0, 3, 3, 8}; // Valor anterior e posterior, respectivamente, de x. "3" elementos. float x_pre[4] = {0, 0, 0, 0}; float x_pos[4]; // Variável para armazenar o valor do somatório. "3" elementos. float soma[4]; // Variável de contagem de iterações. int cont = 1; // Imprime os valores iniciais de x. printf("0: x(1)=%f\tx(2)=%f\tx(3)=%f\n", x_pre[1], x_pre[2], x_pre[3]); do { // Imprime o nº da iteração corrente. printf("%i: ", cont); // Loop de atribuição para o iésimo x. for (int i=1; i<=3; i++) { // Somatório em j. for (int j=1; j<=3; j++) { soma[j] = a[i][j]*x_pre[j]*delta(i,j); } // Atualiza os valores de x. x_pos[i] = (b[i]-soma[i])/a[i][i]; } // Imprime os valores atuais de x. Atribui os valores do vetor x_pos aos do vetor x_pre. for (int k=1; k<=3; k++) { printf("x(%i)=%f\t", k, x_pos[k]); x_pre[k] = x_pos[k]; } // Quebra de linha. Incrementa o nº da iteração. printf("\n"); cont++; } while (cont <= 100); return 0;} Ao executar, ele não converge para os valores reais (x1=-1, x2=3, x3=5/2), e sim fica com o mesmo valor da 1ª iteração (x1=0.375, x2=0.75, x3=1.333...), independente dos valores iniciais. Agradeço pela ajuda.

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!