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 :

Créer et incrémenter un nom de variable automatiquement


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 36
    Par défaut Créer et incrémenter un nom de variable automatiquement
    Bonjour à tous,

    je sais que ce genre de questions a déjà été traité dans la FAQ, mais mon problème est légérement différent.

    Je souhaiterais en effet créer automatiquement n variables portant chacune un nom différent: i1 i2 ... in

    Ces variables serviront à parcourir une matrice.

    Exemple, j'ai la matrice X=[x1 x2 x3 x4] les x étant des vecteurs, je voudrais créer la matrice:
    Xtot=[x1 x2 x3 x4 x1x2 x1x3 x1x4 x2x3 x2x4 x3x4 x1x2x3 x1x2x4 x2x3x4 x1x2x3x4]

    Pour cela, j'ai besoin de parcourir les colonnes les unes après les autres, en fonction du nombre de vecteurs dont j'ai besoin pour remplir ma nouvelle colonne (ex: un choix de 2 vecteurs parmi 4 nécessite 2 variables, pour 3 vecteurs parmi 4, j'ai besoin de 3 variables, etc...).

    Dans ce cas là, avec une matrice de seulement 4 colonnes au départ, c'est facile. Mais il faudrait que je fasse cela avec une matrice de n colonnes. Pour cela, j'ai donc besoin de générer automatiquement un nombre de variables égal a n ou n-1. Il faut de plus que ces variables aient chacune un nom différent...

    Merci de m'aider.

  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 317
    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 317
    Par défaut
    Je ne vois pas pourquoi tu ne peux pas utiliser simplement l'indexage ici ?


  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    Essaye ce code pour créer Xtot :

    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
    22
    23
    24
     
    A = [1 2 3 4; 3 2 4 5];
    s = size(A);
     
    Z = char;
    for i=1:s(2)
        Z = [Z '0']; % Peux faire mieux :)
    end
    N = (2^s(2))-1;     % (1 à 11..1)
     
    Res = zeros(s(1),N);  % Stockage
     
    for i=1:N
        Str = dec2bin(i);
        SStr = [Z(1:s(2)-length(Str)) Str]; % Meme taille pour tous: '1' => '0..01'
     
        Tmp = ones(s(1),1);
     
        for j=1:s(2)
            Tmp = Tmp.*(A(:,j).^(str2num(SStr(j))));
        end
     
        Res(:,i) = Tmp;
    end
    ++ et bonne chance

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 36
    Par défaut
    Merci pour vos réponses.

    Je n'ai pas compris ta remarque Dut. Il me faut des variables pour parcourir les colonnes. Comment j'indexe le nom d'une variable?

    J'ai essayé ton code mr_samurai, et ça ne me donne pas vraiment satisfaction.

    Voici ce que je fais, pour avoir toutes les combinaisons possibles de 2 vecteurs parmi 4 possible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    A = [1 2 3 4; 3 2 4 5];% je reprends ton exemple
    Xtot=zeros(2,6); % 6 car il y a 6 combinaisons possibles de 2 vecteurs parmi %4 disponibles (si on ne prends pas en compte l'ordre).
     
    i=1;
    for j=1:3 %n=4 ici donc il faut n-1
    for l=j+1:4 % car n=4
    Xtot(:,i)=A(:,j).*A(:,l);
    i=i+1;
    end
    end
     
    Xtot=[A Xtot];
    Là, j'ai ce que je veux. Il ne me reste plus qu'à avoir les combinaisons de 3 vecteurs colonnes parmi 4, puis de 4 parmi 4, le principe est le même ce n'est pas très compliqué. Mais j'ai besoin de plus de variables si j'ai plus de colonnes. Et il faut que ce soit entièrement automatique: je ne peux pas créer moi même à la main, le nombre de variables d'incrémentation dont j'ai besoin.

    Si j'ai une matrice A avec n colonnes, comment générer la création de n variables avec un nom distinct, automatiquement?

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    Le code que je t'es proposé fait toutes les combinaisons possible de colonnes :

    Je t'explique :

    1- une matrice de départ avec n colonnes.
    2- je génère les nombres de taille n qui contiennent des 0 et 1 (base 2 ..): 0001 0010 0011 0100 0101 ... 1111.

    3- l'idée est de mettre chaque colonne de la matrice de départ à la position correspondante, par exemple : 0101 => x1^0 * x2^1 * x3^0 * x4^1 = x2*x4 .


    4 - boucler la boucle .

    ++ ,

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 36
    Par défaut
    Ok! merci mr_samurai, je n'avais pas compris!

    Il ne me reste plus qu'à tout remettre dans l'ordre.

    N'empêche, j'aimerais bien savoir comment faire pour générer une variable et incrémenter son nom, et ce de manière totalement automatique...

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/08/2014, 14h18
  2. Incrémenter un nom de variable en CSH
    Par jumiara dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 21/03/2011, 19h37
  3. [AC-2007] Incrémentation du nom du variable via une autre variable !
    Par Spurius dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/04/2010, 14h16
  4. AWK : créer fichier avec un nom de variable
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/08/2009, 08h18
  5. incrémenter le nom une variable
    Par mederic dans le forum C
    Réponses: 15
    Dernier message: 06/05/2006, 19h11

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