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

MATLAB Discussion :

Permutations bizarres [Débutant]


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut Permutations bizarres
    salut tous,

    en ce moment je bosse sur une matrice carré de taille T(n,n) et un vecteur U(n).

    je veux faire un algorithme qui parcourt la diagonale de la matrice et qui cherche la valeur maximal de la colonne en dessous de la diagonale et son indice.
    Pour ça pas de problèmes, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1:1:n
        [max, indice]=max(T(i:n,i))
    end
    par contre une fois que ce max est trouvé j'aimerai inverser la ligne du max et la ligne "i" (pour T et U) en procédant de deux manières:

    1°) en faisant une permutation classique
    2°) en faisant une permutation à l'aide d'une multiplication matricielle

    exemple:
    voici ma matrice T= [3 2 1;3 1 0;4 5 9] et mon vecteur U=[9;5;0]
    je suis sur à i=1 je remarque donc que sous mon terme diagonal j'ai la dernière ligne qui à le maximum je voudrais donc avoir à la fin de cette itération:
    T= [4 5 9;3 1 0;3 2 1] et mon vecteur U=[0;5;9]

    1°) avec une permutation classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for i=1:1:n
        if (T(i,i)<max(i:n,i))
            [max, indice]=max(T(i:n,i))
            ligneMaxT=T(i+indice,:);
            lignePermT=T(i,:);
            ligneMaxU=T(i+indice,:);
            lignePermU=T(i,:);
            T(i+indice,:)=lignePermT;
            T(i,:)=ligneMaxT;   
            U(i+indice,:)=lignePermU;
            U(i,:)=ligneMaxU;
        end
    end
    pensez vous que ceci fonctionne ? (j'ai pas MATLAB à disposition en ce moment ?) je pense que l'on peut faire plus rapide mais je ne sais pas trop comment, avez vous une idée ?

    2°) avec une matrice de multiplication

    la première solution est la plus classique, à présent j'aimerai faire une autre solution : j'aimerai construire une matrice A qui me permettent de faire la même permutation que tout à l'heure en faisant les opérations:

    T=A*T et U=A*U;

    par contre là je sèche complétement

    pourriez vous m'aidez svp ?

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

    Pour la permutation, tu peux utiliser le mettre principe que la discussion sur le Tri par ordre croissant.
    Par contre, il faudrait commencer par bien te relire... Sans rentrer en profondeur, je remarque:
    • if (T(i,i) < max(T(i:n,i)))
    • [max, indice] = max(T(i:n,i)) qui te mènera directement à une erreur. Erreur déjà repérée dans la même discussion sur le Tri. Je te conseille de bien lire cette contribution.

    En ce qui concerne les matrices, tu peux commencer par regarder cet article de Wikipédia.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    salut Jerome !

    Citation Envoyé par Winjerome Voir le message
    Pour la permutation, tu peux utiliser le mettre principe que la discussion sur le Tri par ordre croissant.
    Par contre, il faudrait commencer par bien te relire... Sans rentrer en profondeur, je remarque:
    [LIST][*]if (T(i,i) < max(T(i:n,i)))[*][max, indice] = max(T(i:n,i)) qui te mènera directement à une erreur.
    je vais regarder (mais moi il ne s'agit pas d'un classement par ordre croissant)

    Citation Envoyé par Winjerome Voir le message
    OK, je vais regarder

    Citation Envoyé par Winjerome Voir le message
    En ce qui concerne les matrices, tu peux commencer par regarder cet article de Wikipédia.
    ah oui en effet ça à l'air pas mal ! je ne savais pas que ça existais

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    je vais regarder (mais moi il ne s'agit pas d'un classement par ordre croissant)
    Je sais, c'est juste pour la simplification dont je t'avais parlé au post #14.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    OK, maintenant tous est OK. J'ai bien compris ce que c'est une matrice de permutation et c'est donc OK

    merci pour le lien

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/05/2010, 00h42
  2. taille de structure bizarre ...
    Par lyrau dans le forum C
    Réponses: 3
    Dernier message: 20/11/2003, 10h46
  3. [Algo] Permutations et arrangements
    Par rbag dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 13/10/2003, 11h40
  4. Un String Bizarre
    Par YanK dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 11h05
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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