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 :

Galère avec un nombre variable d'arguments d'une fonction


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieux du son
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieux du son
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Points : 17
    Points
    17
    Par défaut Galère avec un nombre variable d'arguments d'une fonction
    Bonjour à vous,

    Voilà j'ai un programme qui me permet d'obtenir des fonctions avec des variables symboliques. Donc j’obtiens des fonctions dont le nombre d'arguments en entrée est variable (suivant les étapes précédentes de mon programme). Du genre :

    Fonction = @(Arg1, Arg2)Arg1*Arg2

    Mais donc suivant l'utilisation du programme elle peut changer et devenir :

    Fonction = @(Arg1, Arg2, Arg3)Arg1*Arg2*Arg3

    J'aimerai bien pouvoir utiliser cette fonction dans tous les cas, en lui donnant une liste d'arguments. Est-ce possible?
    J'ai regarder du coté de varargin et inputParser, mais je comprends pas très bien comment les utiliser et je ne suis pas sur que ce soit utile dans mon cas...

    Pour résumer j'aimerais faire :
    Résultat = Fonction(Liste_arguments);
    plutôt que :
    Résultat = Fonction(Arg1, Arg2, ...);

    Une idée?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Cela dépend du contenu de ta fonction, mais avec varargin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fun = @(varargin) prod(cell2mat(varargin));
     
    fun(2,3,4,5) % => 120
     
    Liste_arguments = {2 3 4 5};
    fun(Liste_arguments{:}) % => 120

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieux du son
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieux du son
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Merci,
    C'est exactement ce que je voulais. Par contre je ne peux pas utiliser 'varargin' car ma fonction est issu d'un calcul avec des variables symboliques, que je récupère avec 'matlabFunction'.

    Quoi qu'il en soit, je vais donc procéder comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fun = @(arg1, arg2, arg3, ...) arg1*arg2*arg3*...;
     
    for i = 1:nargin(fun)
        Liste{i} = arg(i);
    end
     
    fun(Liste{:})

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 883
    Points : 3 431
    Points
    3 431
    Par défaut
    c'est pas quelque chose comme ca que tu souhaites faire :
    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
    >> x= sym('X',[12,1])
     
    x =
     
      X1
      X2
      X3
      X4
      X5
      X6
      X7
      X8
      X9
     X10
     X11
     X12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >> produit = prod(x)
     
    produit =
     
    X1*X2*X3*X4*X5*X6*X7*X8*X9*X10*X11*X12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >> myfun=matlabFunction(produit)
     
    myfun = 
     
        @(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12)X1.*X2.*X3.*X4.*X5.*X6.*X7.*X8.*X9.*X10.*X11.*X12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> myfun(1,2,3,4,5,6,7,8,9,10,11,12)
     
    ans =
     
       479001600
    auquel cas pour modifier le nombre d'arguments, il suffit de redéfinir les entrées (X) et de recréer la fonction (matlabFonction)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieux du son
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieux du son
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Euh je ne suis pas sur d'avoir bien compris ce que tu voulais m'expliquer, mais je crois que non ce n'était pas vraiment le problème.

    Concrètement (et tu pourra mieux faire le lien avec mon autre post), je donne une liste de variables symbolique genre R1, R2, C1, C2,...
    Je récupère des matrices qui représente le système d'équations de mon circuit électronique, que je mets donc sous forme de fonctions à l'aide de matlabFunction. Et pour tester le système dans la foulée, j'utilise les valeurs correspondantes aux variables, que j'ai inscrites auparavant dans une table.
    Je compare les variables de la fonction et celles de la table une à une pour utiliser les valeurs de références.
    Et c'est là pour mon programme l'intérêt de faire du calcul symbolique, c'est que une fois les équations obtenues, je n'ai plus qu'à remplacer les valeurs des composants pour changer les paramètres du circuit.

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

Discussions similaires

  1. Mettre une variable comme argument dans une fonction
    Par djun1 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/09/2012, 10h44
  2. fct avec un nombre variable d'argument.
    Par hpfx dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2009, 21h46
  3. [Fortran 90] Nombre variable d'arguments
    Par Zoera dans le forum Fortran
    Réponses: 2
    Dernier message: 08/03/2005, 13h08
  4. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08

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