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 :

Conflit entre mon nom de variable et nom de fonction MATLAB


Sujet :

MATLAB

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 680
    Points
    13 680
    Billets dans le blog
    1
    Par défaut Conflit entre mon nom de variable et nom de fonction MATLAB
    Bonjour, j'avais depuis quelques jours un problème, et en écrivant le message pour vous demander de l'aide, j'ai trouvé la solution. Vous allez me demander pourquoi je poste alors En fait, ça m'a fait soulever une question.

    J'explique le problème original.

    Dans une fonction, j'ouvre un inputdlg pour demander un paramètre à l'utilisateur. Il me sert en entrée d'une sous-fonction, dont l'exécution se passe bien. A la fin de ma fonction principale, je souhaite faire un affichage, grâce à un plot mais l'appel à la commande title avec le plot me renvoie le message d'erreur suivant :

    ??? Index exceeds matrix dimensions
    Le problème venait du fait que je créais mon inpudlg de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    prompt = blabla
    title = monTitre
    answers = inputdlg(prompt,title)
    c'est-à-dire de la façon présenter dans la doc de la fonction inputdlg

    Donc j'avais une variable title et quand je faisais title('titreGraphique') et bien il cherchait un élément du tableau title...

    Je trouve ça fou de n'avoir aucun warning ou error de la part de Matlab ! Et surtout que la doc dise de faire comme ça !

    La question donc : comment éviter ce genre de problème ?

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par Bktero Voir le message
    c'est-à-dire de la façon présenter dans la doc de la fonction inputdlg
    Chez moi ce n'est pas le cas (R2007a), et je ne pense pas que MATLAB ferait une aussi grossière erreur

    Dans le help j'ai :
    Examples:

    prompt={'Enter the matrix size for x^2:','Enter the colormap name:'};
    name='Input for Peaks function';
    numlines=1;
    defaultanswer={'20','hsv'};
    Dans la doc :
    Example 1Create a dialog box to input an integer and colormap name. Allow one
    line for each value.prompt = {'Enter matrix size:','Enter colormap name:'};
    dlg_title = 'Input for peaks function';
    num_lines = 1;
    def = {'20','hsv'};
    answer = inputdlg(prompt,dlg_title,num_lines,def);
    Il n'y a jamais de variable TITLE.

    Après c'est vrai que c'est le genre d'erreur fréquente à se taper la tête contre les murs.

    Pour éviter le problème : Conventions de noms : variables

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 891
    Points
    52 891
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Chez moi ce n'est pas le cas (R2007a), et je ne pense pas que MATLAB ferait une aussi grossière erreur
    Si si... ça arrive

    Je crois me souvenir que c'était le cas dans les version 6 et 7... il y avait aussi un exemple d'une fonction où une variable était nommée min

    En même temps, il faut bien comprendre qu'une documentation ne peut pas être parfaite et qu'elle aussi évolue de version en version.

    Si tu créés la fonction INPUTDLG (et donc sa page de documentation) dans une version X et que tu créés ensuite une fonction TITLE dans une version X+n, il se peut que l'exemple utilise une variable title... tant qu'un utilisateur n'a pas rapporter le problème au support pour correction

    La preuve (comme l'a dit Caro), cette "erreur" a été corrigée dans les versions récentes de la documentation

    Maintenant... les lecteurs assidus de ce forum savent bien qu'il ne se passe pas une paire de jours sans que l'on puisse lire dans l'un de nos messages :
    Ne nomme pas ta variable XXXX car c'est déjà la nom d'une fonction MATLAB
    C'est pas pour rien qu'on radote

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 680
    Points
    13 680
    Billets dans le blog
    1
    Par défaut
    Je trouve ça étonnant que Matlab ne mettent quand même pas un warning à la déclaration d'une telle variable s'il n'est pas capable de différencier la variable de la fonction (comme en C++ il me semble).

    D'ailleurs, si on trouve une erreur de ce genre dans la doc, à qui peut-on envoyer un mail ?

  5. #5
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Pour moi il n'y a pas de bug de documentation, d'ailleurs dans les solutions récentes comme là:
    How can I make an input dialog box created by INPUTDLG wide enough to show the entire title?
    on voit bien que c'est la variable title qui est utilisée.

    C'est comme si tu faisais:
    tu auras le même message d'erreur : ??? Index exceeds matrix dimensions.

    D'où l'utilité de la commande which pour vérifier si la variable ne va pas rentrer en conflit avec une fonction déjà existante ...

    Sinon pour remonter un bug de documentation, il faut contacter le support
    dans MATLAB il suffit de taper:
    une page web s'ouvre et tu cliques sur le lien Contact Support ....

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par tug83 Voir le message
    Pour moi il n'y a pas de bug de documentation, d'ailleurs dans les solutions récentes comme là:
    How can I make an input dialog box created by INPUTDLG wide enough to show the entire title?
    on voit bien que c'est la variable title qui est utilisée.
    Permet-moi de ne pas être d'accord
    Si même eux ne font pas l'effort de suivre les bonnes pratiques, il ne faut pas s'étonner que les gens codent avec leurs pieds

    Le problème de cette erreur, fréquente, c'est qu'il est souvent très difficile d'en trouver la cause.
    Alors si lancer un exemple donné par l'éditeur du logiciel te pourrit tout ton environnement de travail, je trouve cela vraiment dommage.

    Je ne dirais pas que c'est un bug, je dirais que c'est de l'inconscience, et qu'il faudrait leur dire de faire la chasse à ce genre de comportement (ce que je vais d'ailleurs faire de suite sur le lien que tu as donné si ça veux bien fonctionner cette fois-ci).

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 891
    Points
    52 891
    Par défaut
    Citation Envoyé par tug83 Voir le message
    Sinon pour remonter un bug de documentation, il faut contacter le support
    dans MATLAB il suffit de taper:
    une page web s'ouvre et tu cliques sur le lien Contact Support ....
    Ou http://www.mathworks.com/support/ser...act_support.do et en cliquant successivement sur Technical Support - Help with using or installing products puis sur Report a documentation error or suggestion

    Citation Envoyé par Caro-Line Voir le message
    Permet-moi de ne pas être d'accord
    Si même eux ne font pas l'effort de suivre les bonnes pratiques, il ne faut pas s'étonner que les gens codent avec leurs pieds
    Même si je suis d'accord avec Caro, je nuancerai quand même le propos en précisant que dans l'ensemble, la documentation MATLAB/Simulink est quand même sacrément bien faite et que ce genre d'erreurs n'est quand même pas très fréquente

    Et pour prouver le contraire de ce que je viens de dire, voir la documention de la fonction EZPLOT (et des fonctions similaires) et l'utilisation de variables min et max

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/11/2015, 13h42
  2. Attribuer le nom du fichier comme nom de variable
    Par plobanalec78 dans le forum MATLAB
    Réponses: 4
    Dernier message: 24/09/2008, 17h03
  3. Conflit entre mon gestionnaire de mémoire et afxmem
    Par mister3957 dans le forum C++
    Réponses: 9
    Dernier message: 30/06/2008, 12h52
  4. conflit entre mon évènement form_load() et mon module
    Par portecd dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/04/2008, 22h12
  5. passer une chaine contenu dans une variable en nom de variable
    Par spiro13 dans le forum Général Python
    Réponses: 5
    Dernier message: 25/04/2007, 12h14

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