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 :

fonction avec plusieurs sorties


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2012
    Messages : 45
    Points : 28
    Points
    28
    Par défaut fonction avec plusieurs sorties
    Bonjour,

    j'ai créé une fonction dans laquelle je créé un tableau de 201x201. Et je voudrais en sortie de cette fonction les colonnes de mon tableau dans 201 vecteurs différents de taille 201x1.
    Le but étant ensuite d'intégrer chacun de ces vecteurs individuellement.
    J'aurais donc voulu savoir s'il existait une méthode permettant de spécifier à matlab que l'on veut 201 sorties, sans avoir à écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     function[k1,k2,...,k201] = myfun(~)     %%% k1,..,k201 mes vecteurs 201x1
       k1=...
       k2=...
       ...
       k201=...
    end

    Merci

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

    Pourquoi ne pas renvoyer ton tableau de 201x201 directement ?
    Rien n'empêche par la suite de traiter chaque colonne séparément.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 95
    Points : 150
    Points
    150
    Par défaut
    Tu recherches tout simplement cela non:
    http://matlab.developpez.com/faq/?pa...ion_var_A1A2AN


    édit: oui, cela revient à utiliser directement ton tableau, comme le propose Winjerome
    Ma version Matlab:Matlab R2011b

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2012
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Je voudrais extraire les vecteurs 1 par 1 parce qu'en fait la fonction que j'utilise pour mon intégrale est celle-ci:
    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
     
    function int = trapezc (a,b,m,fun)
    % TRAPEZC Composite trapeziodal numerical integration .
    % IMP = TRAPEZC (A,B,M,FUN ) computes an approximation
    % of the integral of the function FUN via the the
    % trapeziodal formula ( with M equispaced intervals ).
    % FUN accepts a real vector input x and returns a real
    % vector value . FUN can also be an inline object .
    %%
    %[a , b] extremes of the interval
    % M number of subintervals
    % fun function to be integrated in [a,b]
     
    h=(b-a)/m; x=[a:h:b]; dim = max( size (x )); y= feval (fun );
    if size (y )==1 , y= diag ( ones (dim ))*y; end ;
    int =h *(0.5* y (1)+ sum(y (2:m ))+0.5* y(m +1));
     
     
    return
    C'est un bout de programme que j'ai trouvé sur internet, mais comme je n'ai jamais utilisé "feval" je ne sais pas comment changer ce programme pour qu'il me fasse l'intégrale de mon tableau, colonne par colonne, et m'affiche les valeurs correspondant à chaque colonne...

    Toute aide sera la bienvenue

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 95
    Points : 150
    Points
    150
    Par défaut
    je ne connais pas non plus feval mais si tu définis ton vecteur i par :
    (avec K ton grand tableau) cela ne va pas?

    Ma première idée si je devais faire ce programme serait de faire une boucle for pour l'intégrale des colonnes en enregistrant dans chaque boucle le résultat obtenu
    Ma version Matlab:Matlab R2011b

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2012
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Non ça ne fonctionne pas...
    Parce que j'ai 3 fichiers: une fonction "trapzc" dans laquelle se fait le calcul de l'intégrale, une fonction "myfun" dans laquelle je génère mon tableau K1, et un script "intfinal" dans le lequel je demande l'intégrale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int=trapezc(-2.3E-3*1E-2,2.3E-3,200,@myfun)
    Le problème c'est que le fichier "trapzc" ne calcule que des intégrales pour des vecteurs. C'est pour ça que j'aurais voulu faire une boucle dans mon fichier "myfun" afin de générer 201 vecteurs de taille 201x1, et récupérer ces vecteurs en sortie de "myfun" afin de les intégrer dans dans "intfinal".
    Mais pour l'instant j'arrive juste à faire l'intégrale des vecteurs 1 par 1, en spécifiant dans ma "myfun", K (la sortie de ma fonction) = K1(:,1)
    puis
    K=K1(:,2)
    ...

    alors que moi je voudrais quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for n=1:201
      function K(n)=myfun(~)
      K(n) = K1(:,n)   
      end
    end
    Je sais que matlab va m'insulter si je luis met ça, mais dans l'esprit c'est ce que je voudrais faire.

    Ou alors changer la fonction "trapzc" pour qu'elle fasse l'intégrale de chaque colonne individuellement, en lui spécifiant mon tableau K1 de 201x201 en entrée, mais ça je vois vraiement pas comment faire...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Le code de trapezc est vraiment affreux, pour ne pas dire faux. Les valeurs de y ne dépendent nullement de celles de x générées juste avant.
    Je te conseille de coder cette partie toi-même, en faisant une simple boucle sur tes colonnes comme te le conseille TRSRT.

Discussions similaires

  1. créer une fonction avec plusieurs paramètres
    Par SHERPAE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2009, 17h41
  2. Appel d'une fonction avec plusieurs variables
    Par midoparis dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/05/2008, 11h53
  3. Aide pour déclarer fonction avec plusieurs paramètres de sortie
    Par tonioj41 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/01/2008, 11h06
  4. Fonction avec plusieurs instances
    Par nabab dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 20/09/2007, 12h12
  5. [Système] Fonction avec plusieurs paramètres optionnels
    Par cerede2000 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2007, 14h36

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