salut je sai pa exactement ton probléme mais je vai te donner un code qui marche.
/*Algorithme de JACOBI*/
#include<stdio.h>
#include<math.h>
#define DIM 200
#include<conio.h>
#include<stdlib.h>
void affiche_matrice_vecteur(double A[DIM][DIM],double B[DIM],int n)/*fonction pour l'affichage d'une matrice m de dimention n*/
{
int i,j;
printf("la matrice\n");
for(i=0;i<n;i++)/*boucle for sur les lignes*/
{
printf("|");
for(j=0;j<n;j++)/*boucle for sur les colonnes*/
printf(" %6.2lf ",A[i][j]);
printf("|\n");
}
printf("\n");
printf("le vecteur\n");
for(i=0;i<n;i++)
printf( "%6.2lf\n",B[i]);
}
void init_matrice(double m[DIM][DIM],int n)/*fonction pour l'initialisation d'une matrice m de dimention n*/
{
int i,j;
for(i=0;i<n;i++)/*boucle for sur les lignes*/
{
for(j=0;j<i;j++)/*boucle for sur les lignes de 0 à i*/
{
m[i][j]=(((double)i+1)/(i+j+2));
m[j][i]=m[i][j];/*pour garentir La propriété du symétrique de la matrice m*/
}
m[i][i]=1;/*initialiser les éléments de la digonale de la matrice m*/
}
for(i=0;i<n;i++)/*pour garentir que la matrice m soit à diagonale stricte*/
{
for(j=0;j<i;j++)
m[i][i]+=m[i][j];
for(j=i+1;j<n;j++)/*Un element de la diagonale est la somme des autres éléments de la meme ligne*/
m[i][i]+=m[i][j];
}
}
void init_vecteur(double m[DIM][DIM],double s[DIM],int n)/*fonction pour l'initialisation d'un vecteur s du SEL de dimention n*/
{
int i,j;
// Un élément de ce vecteur est la somme des éléments de A de la meme ligne
for(i=0;i<n;i++)
{ s[i]=0;
for(j=0;j<n;j++)
s[i]+=m[i][j];
}
}
void affiche_sys(double m[DIM][DIM],double s[DIM],double x[DIM],int n)/*fonction pour l'affichage du systeme mx=s*/
{
int i,j;
for(i=0;i<n;i++)
{
printf("|");
for(j=0;j<n;j++)
printf(" %lf ",m[i][j]);
printf("| %lf | %lf \n",s[i],x[i]);
}
}
void calcul_vecteur(double m[DIM][DIM],double s[DIM],double x[DIM],double y[DIM],int n)/*fonction qui calcul le vecteur x par la methode de JACOBI*/
{
int i,j;
for(i=0;i<n;i++)/*boucle our l'initialisation du vecteur y*/
y[i]=x[i];
for(i=0;i<n;i++)/*appliquer la méthode de JACOBI*/
{
x[i]=s[i];
for(j=0;j<i;j++)
x[i]-=m[i][j]*y[j];/*calcul des éléments du vecteur x(d'ordre n) àpatir de ceux du vecteur y(d'ordre n-1)*/
for(j=i+1;j<n;j++)
x[i]-=m[i][j]*y[j];
x[i]=(x[i]/m[i][i]);
}
}
int converge(double X[DIM],double XS[DIM],double eps,int n)/*fonction pour la condition de convergence d'un SEL*/
{
int i;double s=0.00;
for(i=0;i<n;i++)/* on teste si on a atteint le critére d'arret*/
s+=pow((X[i]-XS[i]),2);
s=sqrt(s);
printf("%lf\n",s);
if (s>eps)
return(0);/*si le critére d'arret n'est pas verifié on retourne 0*/
return(1);/*si le critére d'arret est verifié on retourne 1*/
}
void init_vect(double X[DIM],int n,double a)/*fonction pour l'initialisation d'un vecteur*/
{
int i;
for(i=0;i<n;i++)
X[i]=a;/*On initialise la solution à a*/
}
int main()
{
double a[DIM][DIM],b[DIM],x[DIM],j[DIM][DIM],x0[DIM];
int n;
int nit_AJ=0;/*on init le compteur du nombre d'itération pour obtenir le résultat*/
double eps=0.00;/* on init eps(pour le critére d'arret)*/
printf("\n-DEBUT de l'algorithme de JACOBI-\n");
printf("donner la dimention du systeme : ");
scanf("%d",&n);
init_matrice(a,n);
init_vecteur(a,b,n);
affiche_matrice_vecteur(a,b,n);
printf("donner saisir epsilon:\n");
while(eps<=0)
scanf("%lf",&eps);
init_vect(x0,n,2);/*partant de x0=2*/
init_vect(x,n,0);
while(!converge(x,x0,eps,n))/*tant que la convergence est vérifier*/
{
calcul_vecteur(a,b,x,x0,n);
nit_AJ++;
}
affiche_sys(a,b,x,n);
printf("Le nombre d'itérations est:%d\n",nit_AJ);
system("pause");
}