Partage
  • Partager sur Facebook
  • Partager sur Twitter

methode gauss-seidel

10 juin 2008 à 1:13:22


j ai un gros probleme avec les mèthodes sitiratives,SVP j aimerais savoir
pourquoi ce programme pour la rèsolution d un système linèaire par la methode de gauss-seidel ne tourne pas.

merci bien.



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>


//void affiche(long *tableau, long tailleTableau);
float Xnp[3],Xn[3],Z[3];
void main(int argc, char *argv[])
{
FILE* fichier1 = NULL ;
FILE* fichier2 = NULL;

float a[3][3],b[3],m;
double eps=0.01;
int i,j,iter=0;

fichier1 = fopen("donnee.d", "r");
fichier2 = fopen("res.r", "w");

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
a[i][j]=0.;
}
}
for(i=0;i<3;i++)

{

Xnp[i]=0;
Xn[i]=0;
Z[i]=0;
}
for(i=0;i<3;i++)
{
fscanf(fichier1, "%f %f %f\n", &a[i][0], &a[i][1], &a[i][2]);
}
for(i=0;i<3;i++)
{
fscanf(fichier1, "%ld\n", &b[i]);
}
iter=0;
m=10;
do
{if (m>eps)
{for (i=0;i<3;i++)
{
Xnp[i]=b[i];
for(j=0;j<i;j++)
{
Xnp[i]-=a[i][j]*Xnp[j];
}
for(j=i+1;j<3;j++)
{
Xnp[i]-=a[i][j]*Xn[j];
}
Xnp[i]/=a[i][i];

}
for(i=0;i<3;i++)
{
Z[i]=Xnp[i]-Xn[i];
Xn[i]=Xnp[i];
}

for(i=0;i<3;i++)
{
m+=Z[i]*Z[i];
}
m=sqrt(abs(m));
iter++;

{fprintf(fichier2, "%ld %f\n", iter,m);}
}
else
{for(i=0;i<3;i++)

{fprintf(fichier2, "%f\n", Xn[i]);}
}
}

while(iter<100);
fclose(fichier1);
fclose(fichier2);


}

  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2008 à 7:54:18

Salut,

Merci de surveiller ton orthographe et d'inclure ton code entre les balises <code> afin d'améliorer la lisibilité de ce forum. ;)

Bye
  • Partager sur Facebook
  • Partager sur Twitter