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 :

utiliser un nom de variable pour un plot


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut utiliser un nom de variable pour un plot
    Bonjour à tous,
    Je débute sur Matlab, et je souhaiterai mettre en boucle un plot. Au lieu de lui donner une matrice à afficher, je souhaite lui donner le nom de la matrice à afficher, j'ai fait ceci, mais ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i=1:1:nb_ch
       subplot(nb_ch,1,i);
       ch=strcat('y_ch',num2str(i));
       disp(ch);
       plot(t,ch);  
    end
    Effectivement dans ce code Matlab va vouloir faire le graph de la variable 'ch', mais pas de la variable dont le nom est contenu dans 'ch'.
    En espérant avoir été assez clair, avez vous quelques informations pour m'aider?

    Merci

    Anthony

  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 313
    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 313
    Points : 52 939
    Points
    52 939

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse,
    Effectivement j'ai découvert pas mal de choses, très bon tuto, mais je n'ai pas trouvé la réponse à mon problème.

    Pour faire même plus simple, avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    X = 0.1:0.1:1
    X = X'
    nom='X'
    Y={nom}
    Je souhaiterai que Y soit une matrice qui est une copie de la matrice X
    Évidement c'est un problème de syntaxe à la ligne 4, mais je bute ...

    Si tu as un indice je suis preneur ^^ !

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Pourquoi tiens-tu tant à utiliser un nom au lieu d'une indexation par tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    X = 0.1:0.1:1
    X = X'
    Y=X % Voilà, Y est une copie de la matrice X...

  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
    Si le nom est une variable disponible dans le workspace appelant la fonction: evalin('caller','var_name');
    Sinon, eval(), comme suggéré par Dut

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Voilà ce que je voulais dire par indexation.

    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
    close all;
    clear all;
    clc;
     
    t = 1:10;
     
    nb_ch = 3;
    vname = 'y_ch';
    y_ch(1,:) = 1:10;
    y_ch(2,:) = 10:-1:1;
    y_ch(3,:) = ones(1,10)*5;
     
    figure;
    for i=1:1:nb_ch
       subplot(nb_ch,1,i);
       disp([vname,num2str(i)]);
       plot(t,y_ch(i,:));
       title([vname,num2str(i)],'interpreter','none');
    end
    L'utilisation de la fonction eval est très puissante, mais très déconseillée. À la limite, si tu veux convertir le nom d'une variable en string, tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    close all;
    clear all;
    clc;
     
    vname = @(x) inputname(1);
    mavariable = rand(5);
    disp(vname(mavariable));
    Autrement, oui, evalin ou assignin peuvent être utilisés.

  7. #7
    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
    Pourquoi tiens-tu tant à utiliser un nom au lieu d'une indexation par tableau ?
    Imho, la seule raison valable est d'éviter les copies mémoire des objets passés en argument. C'est d'ailleurs comme cela que fonctionne la fonction save().

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par VV33D Voir le message
    Imho, la seule raison valable est d'éviter les copies mémoire des objets passés en argument. C'est d'ailleurs comme cela que fonctionne la fonction save().
    Il faudrait alors une notion de "pointeur" en MATLAB, comme en C, non ?

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Citation Envoyé par VV33D Voir le message
    Sinon, eval(), comme suggéré par Dut
    Ah non par pitié… ne m'associez pas à eval

  10. #10
    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
    Il faudrait alors une notion de "pointeur" en MATLAB, comme en C, non ?
    Si tu en as besoin en tant que client, tu peux utiliser des handle-class. Bien sur, l'adresse passée en argument est copiée (passage de référence par copie). On est donc pas loin du java ou du Python ici (même si en interne je crains qu'ils soient globaux tout comme les handles graphiques)

    Par contre, en interne, Matlab utilise bel et bien des pointeurs. La doc prétend que les données ne sont copiées que si la fonction en a besoin, mais il n'est pas toujours facile de savoir quelle instruction provoque la copie (un bloc if jamais exécuté par exemple).

    eval('Désolé Dut');

Discussions similaires

  1. utilisation des noms des variables dans les conditions
    Par ankhaline dans le forum SAS Base
    Réponses: 4
    Dernier message: 14/08/2010, 14h34
  2. Utiliser les noms de colonne pour une boucle for
    Par RémiCA33 dans le forum R
    Réponses: 2
    Dernier message: 01/07/2010, 09h52
  3. utilisation nom de variable pour le nom d'une commandbars
    Par modus57 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/09/2008, 18h11
  4. Utiliser un nom de variable dynamique
    Par Zakapatul dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/08/2008, 16h00
  5. nom des variables pour se faciliter la vie
    Par Slumpy dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/03/2007, 10h31

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