Résolution Ax=B en langage C

Résolu
Bonjour,

je dois résoudre l'équation matricielle Ax=B avec A une matrice et B un vecteur. J'ai donc écrit ce programme mais il me donne une erreur de segmantation que je n'arrive pas à rséoudre.

quelqu'un peut-il m'aider?

//Résolution de systèmes triangulairess.

//résolution de système supérieur.

//Vérification pour savoir s'il s'agit d'une matrice triangulaire supérieure dont le déterminant est soit nul (cad si il y a un 0 sur la diagonale...renvoie 0),
//soit non nul (renvoie 1).Si elle n'est pas triangulaire, on renvoie -1.

int triangSup(matrice A)
{
int i=1;
int j;
int OK=1;

while((i<(A.dim)) && (OK==1))
{
j=0;

while((j<i) && (OK==1))
{

if((A.cont[i][j])!=0) OK=0;

j++;
}

i++;
j=0;
}

if(OK==0) return -1;

else { //vérifie la diagonale

i=0;

while((OK==1) && (i<(A.dim)))
{
if((A.cont[i][j])==0) OK=0;
i++;
j++;
}

if(OK==0) return 0;
else return 1;

}
}

//Résolution Matrice triangulaire supérieure.

vecteur resolSystSup(matrice A1, vecteur B)
{
vecteur X;
int c=triangSup(A1);
if(c==1)
{

int i;
int j;
float S;

A1.dim=X.dim;
X.cont=(float*)malloc((X.dim)*sizeof(float));

for(i=(A1.dim)-1; i>=0; i--)
{
S=0;

for(j=i+1; j<(A1.dim); j++)
{
S=S+((A1.cont[i][j])*(X.cont[j]));
}
X.cont[i]=(B.cont[i]-S)/(A1.cont[i][i]);
}

}
else printf("pas de résolution possible\n");
return X;
}

int main(){

matrice M;
vecteur V;
vecteur result;

M=lectureMat(); //permet de rentrer la matrice
V=lectureVect(); //permet de rentrer le vecteur

result=resolSystSup(M,V);

afficheVect(result);

return 0;

}

--

L'important, c'est les trois points...
Configuration: Windows XP
Firefox 2.0.0.12

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour !
    voilà bien longtemps que je n'ai plus pratiquer de c ou c++, et encore plus longtemps que je ne comprends plus ces histoires de matrices et vecteurs..
    Néanmoins, à la lecture rapide de ton code :
    "//Vérification pour savoir s'il s'agit d'une matrice triangulaire supérieure dont le déterminant est
    soit nul (cad si il y a un 0 sur la diagonale...renvoie 0), <<== il ne manque pas les '//' pour les commentaires ?
    //soit non nul (renvoie 1).Si elle n'est pas triangulaire, on renvoie -1. "

    Peut etre que c'est là que survient le pb lors de la compilation ?
    1. Non ce n'est pas ça, c'est juste qu'il n'y avait pas assez de place sur ce forum pour tout mettre en une ligne
      1. a quel ligne il te donne l'erreur ?
        1. Oui pardon, j'ai oublié de dire qu'il compilait mais l'erreur vient lors de l'éxécution donc il ne me donne pas de ligne, il me dit juste qu'il y a une erreur de segmantation.
      2. Je viens de trouver mon erreur.

        j'ai écrit A1.dim=X.dim au lieu de X.dim=A1.dim.

        C'est une erreur à la con comme on fait souvent...

        Merci de m'avoir aidé.