Partage
  • Partager sur Facebook
  • Partager sur Twitter

methode gauss-seidel

11 juin 2008 à 20:26:17

<code type="cpp"></code>
j'ai un gros probleme avec les mèthodes itiratives,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
11 juin 2008 à 20:39:19

Si tu mettais des commentaires, des tabulations et que tu postais ce code dans la rubrique C, ça irait mieux :/
  • Partager sur Facebook
  • Partager sur Twitter
11 juin 2008 à 20:50:03


j'ai recherché en quoi consistait la méthode, et c'est super violent :/
au mieux j'aurais pu t'aider pour un gauss-jordan
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 juin 2008 à 21:18:31

Bonjour,

Le forum C c'est par ici, merci d'y créer un nouvea sujet en n'oubliant pas les balises code pour colorer ton code. :)
  • Partager sur Facebook
  • Partager sur Twitter