Résolution Ax=B en langage C

Résolu/Fermé
guitoontruant Messages postés 315 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 26 août 2011 - 21 févr. 2008 à 15:50
guitoontruant Messages postés 315 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 26 août 2011 - 21 févr. 2008 à 17:02
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 mardi 4 décembre 2007 Statut Membre Dernière intervention 10 juin 2008 115
21 févr. 2008 à 15:56
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 dimanche 7 janvier 2007 Statut Membre Dernière intervention 26 août 2011 53
21 févr. 2008 à 16:26
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 jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
21 févr. 2008 à 16:33
a quel ligne il te donne l'erreur ?
0
guitoontruant Messages postés 315 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 26 août 2011 53
21 févr. 2008 à 16:35
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 dimanche 7 janvier 2007 Statut Membre Dernière intervention 26 août 2011 53
21 févr. 2008 à 17:02
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