Téléchargement
illégal
Posez votre question Signaler

Résolution Ax=B en langage C [Résolu]

guitoontruant 309Messages postés 7 janvier 2007Date d'inscription 26 août 2011Dernière intervention - Dernière réponse le 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;
}
Lire la suite 

Résolution Ax=B en langage C »

5 réponses
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
a quel ligne il te donne l'erreur ?
guitoontruant- 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.
Ajouter un commentaire
Réponse
+0
moins plus
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é.
Ajouter un commentaire
Ce document intitulé « Résolution Ax=B en langage C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?