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 :

Pourquoi mes sorties de fonction ne sont pas en variable globale


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut Pourquoi mes sorties de fonction ne sont pas en variable globale
    Bonjour,

    Je me remets a Matlab apres une grosse pause, bien qu'ayant deja fait ca sans probleme, je ne sais pas pourquoi ca ne fonctionne pas ici..

    Quand j'execute le code ci-dessous, "first" et "second" n'apparaissent pas dans mes noms de variables, pourquoi ?
    Le fichier file.txt contient 3 colonne, les deux premiere je veux les mettre dans ma variable first et la 3eme dans la variable second.

    Code Matlab : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function [first, second] = ReadInputFile
    %clear all;
    A = load ('file.txt');
     
    first = A(1:2,1);
    second = A(:,3)
     
    end

    Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    Comment as-tu procédé pour exécuter le code ?

    Quand tu dis que "first et second n'apparaissent pas dans mes noms de variables"... où veux-tu qu'elles s'affichent exactement ?

    Cordialement,

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    J'aimerai pouvoir ensuite utiliser ces variables dans d'autres fonctions.
    donc quand sous la console je tape "first" et "second", j'aimerai voir leurs valeurs s'afficher.

  4. #4
    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
    Bonjour,

    Les variables d'une fonction ne sont jamais globales (sauf si tu utilises le mot clef global), et heureusement ! Elles sont crées quand tu rentres dans la fonction, et détruite quand tu en sors.

    Ta fonction renvoie deux arguments, il faut donc les conserver à l'endroit qui t'intéresse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [a, b] = ReadInputFile();
    % Tu as maintenant tes deux variables a et b contenant ce que tu souhaites.

  5. #5
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    A cette question :

    Citation Envoyé par tachmou Voir le message
    Quand tu dis que "first et second n'apparaissent pas dans mes noms de variables"... où veux-tu qu'elles s'affichent exactement ?
    Tu as répondu :

    Citation Envoyé par DJEcalcul Voir le message
    quand sous la console je tape "first" et "second", j'aimerai voir leurs valeurs s'afficher.
    Tu souhaites donc que "first" et "second" s'affichent dans la console. Pour cela, il suffit d'exécuter cela sous la console :

    [first, second] = ReadInputFile
    Cordialement,

    ps: c'est dommage que tu n'aies pas répondu à la première question d'abord, ça t'aurait permis de clarifier tes esprits plus simplement encore.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    merci a vous deux.

    Dans mes souvenirs il me semblait pourtant que je pouvais acceder aux outputs d'une function pour etre utiliser comme une entrée dans une autre function ? tant que c'est dans le meme repertoire.

    C'est d'ailleurs ce qu'a l'air de suggerer le manuel de Matlab.

  7. #7
    Membre habitué
    Profil pro
    Doctorant
    Inscrit en
    Mars 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 147
    Points : 196
    Points
    196
    Par défaut
    Ce n'est pas une question de répertoire mais de workspace.

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Matersss Voir le message
    Ce n'est pas une question de répertoire mais de workspace.
    Merci master,
    Et donc puis-je appeler directement "first" et "second" a l'exterieur de la function ?
    ici ils sont declares en sortie de la function, donc ils doivent exister dans mon workspace courant ?!!

  9. #9
    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
    Le répertoire n'a rien à voir ici. C'est une question de variable temporaire.

    Si f renvoie un output, et que g prends un argument, g(f()) va effectivement passer l'output de f à g. Mais ici, c'est la syntaxe qui aide Matlab à comprendre : f() est dans les parenthèses de g, et donc Matlab va stocker l'output de f() quelque part afin de le transmettre à g.

    Par contre, si f renvoie 2 outputs, g(f()) ne communiquera à g QUE le 1er output, ce qui montre bien que quelque part, matlab fait un truc équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var_temporaire= f()
    g(var_temporaire)

    Dans ton cas par contre, le manuel de Matlab n'a jamais suggéré que tous les outputs étaient globaux. Tu imagines si tu appelles 2 fonctions ayant le même nom de variable renvoyée ???

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    ok, dans ce cas je ne comprends pas l'interet des f(sortie1, sortie2 ..) de matlab ?
    Quel est donc l'interet d'avoir plusieurs sorties de function si on ne peut pas les utiliser ?

    Donc je dois faire sans les fonctions ? si je veux aller et venir entre different fichier de code. Mon idee principale est de render le code plus leger et lisible et donc de partitionner entre different fichier les differentes taches. Et donc a ce titre j'aimerai utiliser des sorties d'une function pour en alimenter une autre.

  11. #11
    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
    Comme pour la très grande majorité des langages de programmation, les noms des inputs et des outputs sont arbitraires (variables muettes).
    Quand tu définis une fonction y=f(x), y et x sont des noms complètement arbitraires (du coup autant les nommer intelligemment pour faciliter la lecture du code).

    Maintenant, si tu veux calculer une valeur de f en particulier, tu fais y0= f(x0). Dans ce cas, x et y n'existent pas en tant que variables, mais x0 et y0 existent.

    Quel est donc l'interet d'avoir plusieurs sorties de function si on ne peut pas les utiliser ?
    Tu peux les utiliser en les récupérant explicitement, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [m,im]= max(rand(100,1));
    recupère bien les 2 outputs dans deux variables m et im.

  12. #12
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    Prends le temps de clarifier tes esprits : tu vas trop vite !

    Citation Envoyé par DJEcalcul Voir le message
    Dans mes souvenirs il me semblait pourtant que je pouvais acceder aux outputs d'une function pour etre utiliser comme une entrée dans une autre function ?
    C'est possible. Imagine que tu écrives une autre fonction f à 2 entrées et 4 sorties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [first, second] = ReadInputFile
    [out1, out2, out3, out4] = f(first, second)


    tant que c'est dans le meme repertoire.
    Tu parles de quoi ? De tes variables ou de tes fichiers qui définissent tes fonctions ? Les fichiers doivent être dans le même répertoire, effectivement. (on parle de variables depuis le début, c'est pourquoi tu as reçu les réponses précédentes)

    Cordialement,

  13. #13
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Merci avous deux.

    Donc si je comprends bien, la reponse est OUI, on peut utiliser les soties d'une function comme entree dans une autre, mais elles ne s'afficheront pas dans le workspace ?!

    par exemple :
    function(A,B)=f1(bla)
    et
    function(blo)=f2(A,B)

    fonctionnera et prendra bien les resultats de f1 pour les injecter dans f2 ?

    ps : Desole de ne pas avoir poser les choses de cette maniere depuis le debut, mais au fil de la discussion j'ai pu cerner un peu plus mon probleme, merci a vous.

  14. #14
    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
    fonctionnera et prendra bien les resultats de f1 pour les injecter dans f2 ?
    NON, ca ne le fera pas tout seul !
    C'est à toi de le faire à la main, en appelant explicitement les fonctions comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [x1,x2]= f1();
    f2(x1,x2);
    Remarque que j'ai appelé x1 et x2 les arguments de ta fonction déclarée avec A et B,; pour insister sur le fait que les noms A et B n' EXISTENT PAS depuis l'extérieur de la fonction. C'est MOI qui décide d'attribuer les 2 résultats de f1 aux variables locales appelées x1 et x2, et c'est MOI qui décide d'envoyer ces résultats à la fonction f2. Matlab n'a rien fait tout seul !

  15. #15
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Vous êtes mignons tous les deux

    Encore une fois, DJEcalcul, tu t'es exprimé trop vite. Du coup, tu t'es mal exprimé, ce qui explique la réponse de VV33D... qui - d'après moi - confirme en fait ce que tu penses : il a juste écrit correctement les choses.

    Mais je pense que tu as bien compris. Il ne te reste plus qu'à faire quelques tests sur des exemples simples pour te faire les crocs

    ps: très intéressante discussion qui montre l'intérêt de bien maîtriser l'art de l'utilisation et de la rédaction de fonctions en matlab.

  16. #16
    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
    qui confirme ce que tu penses... en écrivant correctement les choses.
    on peut utiliser les soties d'une function comme entree dans une autre, mais elles ne s'afficheront pas dans le workspace ?!
    Je vois mal comment envoyer plusieurs outputs vers f2 sans les faire s'afficher dans le workspace en tant que variables temporaires! C'est le bout en gras qui laisse penser que DJEcalcul espère une redirection automatique des arguments.

  17. #17
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Sauf que DJEcalcul ne maîtrise plus les workspace : pour lui il n'y en a qu'un seul je pense, donc je pense qu'il est préférable pour sa compréhension de rester simple.

    Je pense qu'avant d'aller plus loin, il serait judicieux que tu fasses quelques tests DJEcalcul. Si tu as des problèmes en particulier avec certains codes, montre les ici en nous disant ce qui te gène.

  18. #18
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Ok merci a vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Résolu] Ma fonction ne modifie pas la variable globale
    Par Wenneguen dans le forum Général Python
    Réponses: 8
    Dernier message: 02/05/2014, 00h23
  2. [SSH2] Les fonctions ne sont pas (re)connues
    Par Nikko92 dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 14/07/2008, 12h32
  3. Réponses: 4
    Dernier message: 26/11/2007, 12h25
  4. Mes DVD R+ (W) ne sont pas reconnus
    Par Speed41 dans le forum Périphériques
    Réponses: 10
    Dernier message: 29/12/2006, 11h34
  5. Réponses: 3
    Dernier message: 12/08/2006, 22h05

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