IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

Gestion de matrice


Sujet :

Signal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 114
    Par défaut Gestion de matrice
    Bonjour à tous,
    J'ai une matrice A(k,n), avec k et n différente, j'ai pris ici comme exemple k=2 et n=9.

    je cherche de classifier les éléments de la matrice selon un critère 'max H', et je prend la première ligne comme référence.

    c'est à dire je commence avec la deuxième ligne (k=2) et je test chaque élément dans cette ligne(m=1;2;3;4 ....n) avec tous les éléments de la ligne précédente (k=1) et quand je trouve max 'H' (entre deux éléments) ce signifié que les deux éléments sont le même pour cela je changer la position de cet élément (exemple m=2) à la même position de l’élément dans (k1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    for k=1:2
        for m=1:n
            Px=zeros(n);
     
            for idx= 1:n
     
                % calcul de H entre chaque élément de m et tous les          éléments de la   ligne précédent.
                H= B(k+1,m)-B(k,n)
     
                Px(n)=H;
            end   % (boucle idx)
     
            val=find(max(Px));
            idx=find(Px==val);
            A(k+1,m)=A(k,idx);
     
        end %(boucle m)
     
     
    end %boucle k)
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    La ligne Px=zeros(n); crée un tableau nxn attention, selon l'utilisation que tu en fais, ce serais plutôt Px=zeros(n,1); : simple vecteur nx1.

    Concernant ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            val=find(max(Px));
            idx=find(Px==val);
    je te suggère de regarder ce sujet de la FAQ.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 114
    Par défaut
    Merci pour la réponse, j'ai essayé de simplifier les chose,
    j'ai commencé avec un petit programme ci dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    V1=[1 2 3 4 5];
    V2=[2 1 7 5 4];
     
    for i=1:5
     
        for j=1:5
     
            if  V2(1,j)==V1(1,i);
     
                V3(1,i)=V2(1,j);
     
            end
        end
    end
    et là j'ai un problème quand le critère de sélection valide normalement je dois changer la position de la valeur tester en dessous de celle de le max.
    je ne sais si j'ai bien fais ou non.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    for k=1:2
        for m=1:n
            Pnm=0;
            for idx=1:n
                H=V2(k+1,m)-V1(k,idx)
                Px(idx)=H;
            end
     
     
            [a,idx_max ]= ismember((max(Px)),Px)    % chercher le max idx_max 'colone'
     
            if idx~=0      % coditions sur le max dés fois il n'existe pas un max
                V2(iFreq,m)=V2(iFreq,idx);
            else
                V2(iFreq,idxi)=V2(iFreq,idxi); % s'il ne trouve pas un max garder la position de la valeur
     
     
            end
        end

  4. #4
    Invité
    Invité(e)
    Par défaut
    As-tu vraiment lu mon lien ?
    ismember ou find sont inutiles, la fonction max suffit largement.
    [~,idx_max] = max(Px); tout simplement.

    Sinon d'où viennent ces idx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if idx~=0      % coditions sur le max dés fois il n'existe pas un max
                V2(iFreq,m)=V2(iFreq,idx);
            else
                V2(iFreq,idxi)=V2(iFreq,idxi); % s'il ne trouve pas un max garder la position de la valeur
    ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 114
    Par défaut
    Merci Jérome,
    c'est bon j'ai réussi de le faire, mais j'ai une autre petite problème,
    j'ai une matrice A(50,11), et chaque colonne c'est un courbe mais il n'est pas continu, exemple A(:,1) courbe, je cherche de relier le courbe, par interpolation ou extrapolation, juste au niveau de l'affichage (je ne cherche pas de changer la fonction avec la quelle j'ai obtenu les courbes)

    merci
    Images attachées Images attachées  

  6. #6
    Invité
    Invité(e)
    Par défaut
    Au vu des courbes, il y a des valeurs NaN intercalées, je me trompe ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gestion de matrice d'objet
    Par DrDam dans le forum C++
    Réponses: 2
    Dernier message: 02/06/2008, 20h15
  2. Gestion de matrices
    Par krikri1504 dans le forum Débuter
    Réponses: 16
    Dernier message: 19/05/2008, 20h56
  3. A propos du tutoriel sur la gestion des matrices
    Par Pierre845 dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/04/2008, 14h32
  4. Gestion de matrice
    Par bzd dans le forum C
    Réponses: 4
    Dernier message: 12/08/2002, 19h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo