Gauss Seidel

Publicado por Perfil removido 15/05/2008

[ Hits: 26.605 ]

Download GaussSeidel.c




Esse script é bem simples, calcula o Metodo de Gauss Seidel.

Depois de compilar e executar dando as entradas devidas, gera um arquivo texto. Dê o nome para esse arquivo.

Obs:Deve definir o tamanho da matriz(1000x1000 por exemplo).Você pode tirar os argumentos que fazem ele ficar destacado. <printf("{DESCRICAO}33[036m")..etc>

  



Esconder código-fonte

/*Matematica numerica
Claudir Oliveira
Método de Gauss Seidel
*/
/*
<1º passo-Criação de ponteiros e alocação de ponteiros>
<2º passo-Criar ponteiro para arquivos e escrever aquivos>
############################################################
compilar:gcc SeidelModificado.c -o <name>
*/
#include<stdio.h>
#include<math.h>
#include<malloc.h>
double **a, *b, *x;
int i, j, n;

main()
{
 void gauss_Seidel(), aloc_var();
 int s, m, n;
 s = 0;
 while(s==0)
 {
  printf("{FONTE}33[036m");
  printf("{FONTE}33[04m");
  printf("Resolução de SELAs - Gauss-Seidel \n");
  printf("{FONTE}33[00m");
  printf("{FONTE}33[036m");
  printf("\n Forneça as dimensões da matriz A: m n = ");
  printf("{FONTE}33[00m");
  scanf("%d %d", &m, &n);
  aloc_var(m,n);
  gauss_Seidel(m,n);
  printf("{FONTE}33[036m");
  printf("{FONTE}33[05m");
  printf("\n Deseja sair do progrma? (1-Sim, 0-Não)");
  printf("{FONTE}33[00m");
  scanf("%d", &s);
 }
}


void gauss_Seidel(m,n)
 int m, n;
{
 double somat();
 int k, tol;
 printf("{FONTE}33[036m");
 printf("\n Defina a matriz A[%dx%d]\n",m,n);
 printf("{FONTE}33[00m");
 for(i=0; i<= m-1; i++)
 {
  for(j=0; j<=n-1; j++)
  {
   printf("\n a[%d,%d]=  ",i+1,j+1);
   scanf("%lf",&a[i][j]);
  }
 }
 printf("{FONTE}33[036m");
 printf("\n Defina o vetor B(%d)\n",m);
 printf("{FONTE}33[00m");
 for(i=0; i<=m-1; i++)
 {
   printf("\n b[%d]=  ",i+1);
   scanf("%lf",&b[i]);
 }
 printf("{FONTE}33[036m");
 printf("\n Defina o vetor x(%d)\n",n);
 printf("{FONTE}33[00m");
 for(i=0; i<=n-1; i++)
 {
   printf("\n x[%d]=  ",i+1);
   scanf("%lf",&x[i]);
 }
 printf("{FONTE}33[036m");
 printf("\n Defina o número de iterações = ");
 printf("{FONTE}33[00m");
 scanf("%d", &tol);
 k = 0;
 while (k < tol)
 {
  for(i=0; i<=n-1; i++)
  {
   x[i] = (b[i] - somat(i,n) + a[i][i]*x[i])/a[i][i];
  }
  k = k+1;
 }
 printf("{FONTE}33[036m");
 printf("\n O vetor x é = \n");
 printf("{FONTE}33[00m");
 for (i = 0; i <= n-1; i++)
 {
  printf("%g \n", x[i]);
 }
}

double somat(i,n)
 int i, n;
{
 double soma;
 soma = 0.0;
 for(j=0; j<=n-1; j++)
 {
  soma = soma + a[i][j]*x[j];
 }
 return soma;
}
void aloc_var(m,n)
 int m,n;
{
 int i;
printf("\n Valor de m , n = %d,%d\n",m,n);
a=(double **) malloc((m+1)*sizeof(double *));
b=(double *) malloc((m+1)*sizeof(double));
x=(double *) malloc((n+1)*sizeof(double));
 for(i=0;i < n+1;i++)
 {
  a[i]=(double *)malloc((n+1)*sizeof(double));
 }
}

Scripts recomendados

função de remoção em uma Arvore

Qual a idade de Jacinto?

Arvore em C

Programa para escola

Equações de primeiro e segundo grau


  

Comentários
[1] Comentário enviado por marr3ta em 15/05/2008 - 17:27h

gauss sidel, eu faço na mao!! aiuhaiuhaiuhaiuhaiuhiuh.. valew cara!! muito show

[2] Comentário enviado por albertguedes em 16/05/2008 - 01:00h

Tá, sempre apoio as iniciativas de publicações aqui no VOL, independente do assunto, mas um ponto tenho que dizer Claudir, para uma técnica numérica não muito popular entre os visitantes do VOL, feita em C e ainda por cima sem comentários explicativos no código ? Eu entendo sua boa intensão, mas ela foi por agua abaixo, pois você dificultou a compreensão rápida do código, que é o ponto didático da seção de scripts. Pense nisso nos próximos códigos que você publicar.
De resto, seu código é muito bom Claudir.

[3] Comentário enviado por dborges em 07/10/2011 - 14:26h

Boa tarde.
Tentei rodar seu codigo aqui, da forma como esta, mas nao funcionou... Vc pode me dar alguma dica? Sou academico de eletrica, e estou utilizando muito Gauss Seidel, entre outros. Por acaso, vc teria o Metodo das Gradientes tambem?!Ah, sobre o erro, quando eu compilo, o erro ta logo abaixo do Main, no " void gauss_Seidel(), aloc_var();". Se possivel, por favor me ajude. Obrigado!

[4] Comentário enviado por binhobinho em 29/10/2013 - 22:05h

Meu caro, rodei o seu algoritmo no deve c++ em c funcionou perfeitamente, apos horas pesquisando na net de todos os algorítmos encontrados e diga-se de passagem de sites fomosos, o seu foi o único que rodou e que funcionou bem.
quero agradece-lo por isso. quero dizer também que o sistema que estou usando é windows 7 starter


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts