Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : code dual [ Algorithme / Maths ] (Lil3500)

lundi 28 juillet 2008 à 10:49:30 | code dual

Lil3500

Bonjour,
Je cherche à écrire une fonction de recherche du code dual d'une matrice. J'ai essayé un code par une élimination de gauss (que j'ai peché sur internet puis legerement modifié)mais quand je teste la matrice que j'obtiens sur un vecteur, que je multiplie par la matrice d'origine puis je remultiplie par la matrice duale, je n'obtiens pas 0 !
est ce que quelqu'un aurait une idee sur comment faire pr obtenir le code dual?
Je vous remercie bcp pr l'aide!

voici ma fonction:

[cpp]

// starting from HH matrix, an int** of _M by N

/* invert HH matrix here */
    /* row and column indices */
    int* ir = new int [_M];
    int* jc = new int[_N];
    for( int i=0 ; i<_M ; i++)
        ir[i] = i;
    for( int j=0 ; j<_N ; j++)
        jc[j] = j;

    /* perform Gaussian elimination on H, store reodering operations */
   int rdep = 0; /* number of dependent rows in H*/
   int d = 0;    /* current diagonal element */
    while( (d+rdep) < _M) { /* cycle through independent rows of H */ 
        int j = d; /* current column index along row ir[d] */
        while( (HH[ir[d]][jc[j]] == 0) && (j<(_N-1)) )
            j++;            /* find first nonzero element in row i */
        if( HH[ir[d]][jc[j]] ) { /* found nonzero element */
            /* swap columns */
            int tmp = jc[d]; jc[d] = jc[j]; jc[j] = tmp;
            if(_q==2) { /* GF2 */
              /* eliminate current column using row operations */
                for(int ii=0 ; ii<_M ; ii++)
                 if(matrH[ir[ii]][jc[d]] && (ii != d)) /* nonzero and non-diagonal */
                    for(int jj=d ; jj<_N ; jj++)
                     HH[ir[ii]][jc[jj]] = (HH[ir[ii]][jc[jj]]+HH[ir[d]][jc[jj]])%2;
            }
            else { /* GFq */                 
                int scale = GFq_inv(matrH[ir[d]][jc[d]],_q); /* inverse of the diag. element */
                /* scale the current row to make the first element 1 */
                for(int jj=0 ; jj<_N ; jj++)
                    HH[ir[d]][jc[jj]] = GFq_m(matrH[ir[d]][jc[jj]],scale,_q);
                /* eliminate current column using row operations */
                for(int ii=0 ; ii<_M ; ii++) {
                    if(HH[ir[ii]][jc[d]] && (ii != d)) {
                        scale =HH[ir[ii]][jc[d]];
                        for(int jj=d ; jj<_N ; jj++) {
                            tmp = GFq_m(HH[ir[d]][jc[jj]],scale,_q);
                            H[ir[ii]][jc[jj]] = GFq_ad(matrH[ir[ii]][jc[jj]],tmp);
                        }
                    }
                }
            }
        }
        else { /* all zeros -  need to delete this row and update indices */
            rdep++; /* increase number of dependent rows */
            int tmp = ir[d];
            ir[d] = ir[_M-rdep];
            ir[_M-rdep] = tmp;
            d--; /* no diagonal element is found */
        }
        d++; /* increase the number of diagonal elements */
    }/*while i+rdep*/
/* done inverting HH */
    _K = _N-_M+rdep; /* true K */
/* create G matrix  G = [A'| I] if H = [I|A]*/


GG = new int*[_K]; 
   for(int i=0 ; i<_K ; i++)   GG[i] = new int [_N];
   
    for(int i=0 ; i<_K ; i++)
        for(int j=0 ; j<(_N-_K) ; j++) {
            int tmp = (_N-_K+i);
 
           GG[i][j] = HH[ir[j]][jc[tmp]];
        }
    for(int i=0 ; i<_K ; i++)
        for(int j=(_N-_K); j<_N ; j++)
            if(i == (j-_N+_K) ) /* diagonal */
               GG[i][j] = 1;
            else
                GG[i][j] = 0;



[/cpp]



Cette discussion est classé dans : int, ir, jj, hh, jc


Répondre à ce message

Sujets en rapport avec ce message

Aide pour mega debutant [ par C++ ] Salut, bon alors je vien d ouvrir c++ mais comment mettre un code sur un boutton ???par exemple ce code comment je doits le mettre sur un bouton :int Problème de "pression de touches" [ par Quiske ] Bonjour tout le monde , je suis un programmeur débutant jeune 14 - 15 ans qui a un problème :Je voudrais dire a l'ordinateur que j'appuie sur une tou Help Debutant [ par Kaouane ] Salut,je voudrais juste savoir les erreurs qu'il y'a dans ce programme qui vam e servir a retenir les syntaxe d'une classe:#include class addition{int Heeeelp .... [ par Guillaume ] J'ai ca : (programme tres simplifié ... bien sur ...)#include #include class TMAC { public: void getVAR();};void TMAC::getVAR() { printf("%d\n",Ai); Pourquoi ca marche pas, c'est tout bete pourtant ! [ par Coyito ] SalutQuand je fais avec VC6:int *b;b= 7992060;(je veux que b pointe sur l'adresse mémoire 7992060)J'ai une erreur : error C2440: '=' : cannot convert [debutant] Simple mais comment faire [ par Coyito ] bonjourj'ai dans mon prgint *b;b est un pointeur vers un int, comment puis connaitre la valeur de cet int sans modifier le programme en amont ???Merci int to char ! [ par nullspace ] Voila mon problème !J'ai une résultat sous forme de variable INT, et je veux que ce résultat soit affecté à une variable de type CHAR.Genre, si j'ai 6 Variable int sur le disque... [ par nullspace ] Je cherche à enregistrer et lire sur le disque par ofstream et ifstream à partir de variables de type int.Seulement il m'écrit sous format texte.En vb Liste des propriétés/fonctions d'une librairie disponible???? [ par nullspace ] Oui je voulais savoir s'il y avait un moyen de connaitre toutes les propriétés et fonction disponible d'une librairie, genre un utilitaire...Par exemp Pas compris les arguments [ par Bog ] Bonjour.Voila à chaque fois que je me lance dans un projet de programmation C++, je suis tjrs bloqué par certaines choses, surtout les arguments, et c


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,156 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.