Problème d'algo

Fermé
TitOuf - 20 août 2013 à 14:55
 TitOuf - 21 août 2013 à 15:45
Bonjour,

Je cherche à résoudre des systèmes AX = B avec A une matrice triangulaire.
J'ai écrit une fonction qui est sensée faire ça :

void systeme(struct Complexe *matrice1, struct Complexe *matrice2, int cas_considere, int nbColonnesMatrice1, int nbLignesMatrice2, int nbColonnesMatrice2){
   int j=0,k=0,l=0;
      if(cas_considere==0){ // matrice1 triangulaire inférieure
         for(j=0;j<nbColonnesMatrice2;j++){
            for(k=0;k<nbLignesMatrice2;k++){
               for(l=k+1;l<nbLignesMatrice2;l++){
                  matrice2[l*nbColonnesMatrice2+j] = souscomp(matrice2[l*nbColonnesMatrice2+j],mulcomp(matrice2[k*nbColonnesMatrice2+j],matrice1[l*nbColonnesMatrice1+k]));
               }
            }
         }
      }
      else if(cas_considere==1){ // matrice triangulaire supérieure
         for(j=0;j<nbColonnesMatrice2;j++){
            for(k=nbLignesMatrice2-1;k>=0;k--){
               if(matrice2[k*nbColonnesMatrice2+j].reel!=0 && matrice2[k*nbColonnesMatrice2+j].imag!=0){
                  matrice2[k*nbColonnesMatrice2+j] = divcomp(matrice2[k*nbColonnesMatrice2+j],matrice1[k*nbColonnesMatrice1+k]);
               }
               for(l=0;l<k;l++){
                  matrice2[l*nbColonnesMatrice2+j] = souscomp(matrice2[l*nbColonnesMatrice2+j],mulcomp(matrice2[k*nbColonnesMatrice2+j],matrice1[l*nbColonnesMatrice1+k]));
               }
            }
         }
      }
}


Pour "développer" cette fonction, je suis parti du BLAS (libriairie de calcul matriciel disponible sur internet : http://www.netlib.org/blas/, routine STRSM dans mon cas). Elle tournait très bien quand je traitais des réels, là je l'ai adaptée pour qu'elle puisse traiter des nombres complexes (les fonctions souscomp, divcomp et mulcomp correspondent respectivement à la soutraction, la division et la multiplication de deux nombres complexes).

Bref, mon problème est que dans le cas 1 (matrice triangulaire supérieure), ma dernière colonne ne contient pas les valeurs que j'attends. Je vois que des calculs sont faits (puisque les valeurs sont mises à jour) mais ils ne sont pas corrects. Toutes mes autres valeurs sont correctes, seule la dernière n'est pas bonne. Du coup j'ai tenté pas mal de choses au niveau des boucles for, mais sans succès.

Voilou donc si quelqu'un voit pourquoi, bienvenue à lui/elle :D

Merci d'avance

1 réponse

Bonjour,

Je mets à jour le problème... Je prends 2 matrices 5x5 et j'applique ma fonction.
Je regarde les données calculées avec des printf, et là je vois que ma dernière colonne n'est pas traitée du tout.

Pourtant avec l'algo ci-dessus je fais varier mon j (ma colonne) de 0 jusqu'à nbColonnesMatrice2 (-1), pourquoi donc alors aucune valeur n'est calculée ?!
0