Résolution Ax=B en langage C

Résolu
guitoontruant Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   -  
guitoontruant Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   -
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;

}

4 réponses

yakka Messages postés 218 Date d'inscription   Statut Membre Dernière intervention   115
 
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 ?
0
guitoontruant Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   53
 
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
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
a quel ligne il te donne l'erreur ?
0
guitoontruant Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   53
 
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.
0
guitoontruant Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   53
 
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é.
0