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 :

sur le calcul de permutation d'un vecteur


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut sur le calcul de permutation d'un vecteur
    Bonsoir,
    J'ai besoin d'un coup de main. Dans le calculs de permutation d’un vecteur la fonction matlab « perms » est souvent utilisé ,mais dans mon cas je cherche nom pas uniquement la valeur de retour finale mais je veux en plus obtenir les résultats des calculs intermédiaires de cette fonction tel que je veux travailler sur des parties successif pour éviter ce problème de la mémoire
    « ??? Error using ==> vertcat
    Out of memory. Type HELP MEMORY for your options”
    par exemple pour un vecteur de taille (1×15) on a 15 ! de possibilités
    si on a
    je veux travailler sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    D=[4     3     2     1
         4     3     1     2
         4     2     3     1
         4     2     1     3
         4     1     2     3
         4     1     3     2]
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    D=[3     4     2     1
         3     4     1     2
         3     2     4     1
         3     2     1     4
         3     1     2     4
         3     1     4     2]
    et ainsi de suite
    Y a-t-il une manière de voir arriver a ces resultas ?ou d’autre fonction ou pgms.
    merci

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonsoir,

    Comme précisé dans la doc de perm
    Limitations
    perms(v) is practical when length(v) is less than about 10.
    Je vois deux solutions, tout dépends de ce que tu veux faire des permutations
    - Recoder toi-même une fonction qui numérote de manière unique les permutations et est capable de renvoyer la "k-ème"
    - Explorer l'espace des permutations via randperm. Le problème est qu'il faudra en tirer énormément pour couvrir tout l'espace. On peut peut-être contourner ce problème en jouant avec les seed/state du RandStream associé, mais rien d'évident.

    Commence par regarder le code de perms.m. Celui-ci est fortement récursif, mais il semble possible de le modifier pour qu'il retourne seulement la k-ème, ou k peut etre défini en bijection avec la structure récursive utilisée. Il va falloir énumérer l'ensemble des suites presque nulle des entiers <=n (ou un truc de ce gout la)

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    bonjour,
    je vous remercie bien pour votre réponse,pour la 2'eme proposition je n'ai pas trop compris "seed/state" et pour le code de la fonction perms sous matlab je ne sais pas où je peux le trouver?

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    bon,je pense que j'ai trouvé le code
    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
    function P = perms(V)
    V = V(:).'; 
    n = length(V);
    if n <= 1, P = V; return; end
     
    q = perms(1:n-1);  
    m = size(q,1);
    P = zeros(n*m,n);
    P(1:m,:) = [n * ones(m,1) q];
    for i = n-1:-1:1,
       t = q;
       t(t == i) = n;
       P((n-i)*m+1:(n-i+1)*m,:) = [i*ones(m,1) t]; % assign the next m
                                                   % rows in P.
    end
     
    P = V(P);
    mais je ne comprend pas ,le code est principalement basée sur la fonction " perms"
    je veux voir comment fonctionne au début?

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Une fonction qui s’appelle elle même dite récursive, ce qui est le cas ici. Un bon moyen de comprendre ce qu'il se passe est d’exécuter la fonction en mode debug et d'avancer pas à pas. Par exemple pour calculer toutes les perm sur 4 éléments, la fonction commence par calculer toutes les perm. s'un ensemble à 3 éléments (via l'appel récursif), puis en déduit toutes celles à 4 éléments

Discussions similaires

  1. Probleme de dépassement sur des calculs d'entiers
    Par Sébastien THEVOT dans le forum C
    Réponses: 21
    Dernier message: 06/09/2006, 10h02
  2. besoin d'un avis sur le calcul msb et lsb d'une trame
    Par thony76 dans le forum Visual C++
    Réponses: 10
    Dernier message: 03/08/2006, 13h20
  3. [TP7] Question sur les calculs en tp7
    Par argon dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 07/10/2005, 05h42
  4. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04

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