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 :

Permutation sans répétition


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Permutation sans répétition
    Bonjour,

    J'ai un petit problème sous matlab. J'ai ce vecteur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = {'-1' '-0.5' '0' '0.5' '1' '-1' '-0.5' '0' '0.5' '1' '-1' '-0.5' '0' '0.5' '1'};
    Je fais une permutation aléatoire des éléments:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    y = x(randperm(length(x)))
    Le problème, c'est que dans ce vecteur y, il y a souvent deux valeurs identiques qui se suivent. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    y = 
     
      Columns 1 through 9
     
        '1'    '0.5'    '1'    '-1'    '-1'    '-0.5'    '-0.5'    '0.5'    '-0.5'
     
      Columns 10 through 15
     
        '0'    '0'    '1'    '0'    '-1'    '0.5'
    Les valeurs -1, -0.5, et 0 se suivent apparaissent deux fois consécutivement.

    Avez-vous une idée d'une méthode pour éviter cela?

    Merci,
    Vincent

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Tu peux nous en dire plus sur le vecteur x ?

    Quel phénomène physique représente-t-il ?
    Comment est-il généré ?
    Pourquoi utiliser un tableau de cellules pour stocker un vecteur ?
    Est-ce normale que ce soit toujours les mêmes valeurs qui soient stockée dedans ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Donc le vecteur x représente des valeurs d'abscisses, il y a 5 valeurs possibles (-1 -0.5 0 0.5 1). Chaque valeur est présente 3 fois dans le vecteur.

    J'utilise un format cellule pour pouvoir faire la permutation: obtenir un ordre aléatoire des 15 valeurs. L'ordre est ici primordial car l'ordre d'apparition des valeurs dans le vecteur correspond à l'ordre temporel. Ma question vient du fait que je ne veux pas que 2 objets consécutifs apparaissent à la même position.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Une première méthode un peu brutale ( et pas forcément très robuste) :

    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
    21
    x = {'-1' '-0.5' '0' '0.5' '1' '-1' '-0.5' '0' '0.5' '1' '-1' '-0.5' '0' '0.5' '1'};
     
    nx = numel(x);
     
    xnum = str2double(x)
     
    idx = true;
    k = 0;
    while (idx == 1) && k<=10
        idxperm = randperm(nx);
        y = xnum(idxperm);
        d = diff(y);
        idx = any(d==0);
        k = k+1;
    end
     
    if k>10
        disp('Mauvaise permutation')
    else
        X = x(idxperm)
    end
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Super, merci. J'ai trouvé une solution de mon côté aussi, pas très esthétique (je la poste dès que c'est amélioré).
    -Vincent

Discussions similaires

  1. Permutation sans répétitions
    Par baldkollet dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/01/2011, 17h24
  2. Requête sans répétition
    Par mariafan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 10/07/2007, 19h31
  3. [mysql] Sélectionner sans répétitions
    Par Colbix dans le forum Langage
    Réponses: 2
    Dernier message: 31/07/2006, 19h59
  4. affichage sans répétitions
    Par devdébuto dans le forum C
    Réponses: 24
    Dernier message: 19/11/2005, 15h28
  5. affichage sans répétitions
    Par devdébuto dans le forum C
    Réponses: 10
    Dernier message: 16/11/2005, 22h10

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