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 :

Deux fonctions dans le même fichier ?


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut Deux fonctions dans le même fichier ?
    Bonjour,

    1) J'essai de comprendre le code suivant:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    function setKernel(KernelName)
    % SETKERNAL Configures solver to use the function set associated with
    % the kernal (potential) specified in KernelName.
    %
    %	setKernel(KernelName) Sets the Matlab path to include
    %	../MatlabPath/kernals/<KernelName>
     
    	% Find the path to MatFMM...
     
    	% (NOTE: Here it is assumed that the user has already placed MatFMM
    	%  in the Matlab path -- otherwise they couldn't have invoked the 
    	%  solver).
     
    	P = path;
     
    	i2 = findstr('MatFMM', P);  % Starting position of 'MatFMM' string in P
    	i1 = findstr(':', P(1:i2)); % Preceding path separator locations
    	if size(i1,2)==0; i1 = 0; end;
    	i1 = i1 + 1;
    	i2 = i2 + 5;
    	MatFMM = P(i1:i2); % This should be the MatFMM path
     
    	% Check if user did something tricky, or if I did something stupid...
    	if size(MatFMM,2) == 0
    		error('Could not find MatFMM in current Matlab path');
    	end
     
    	%fprintf(['MatFMM path = ', MatFMM, '\n']);
     
    	% Now construct path to the main kernal library...
    	Klib = [MatFMM, '/kernels'];
     
    	%fprintf(['MatFMM kernel lib path = ', Klib, '\n']);
     
    	% Create a list of all kernal function libraries to be cleared 
    	% from path...
    	Kflibs = {[Klib, '/Cauchy'],...
                  [Klib, '/Helmholtz']};
     
    	% Clear old kernels from path if any...
    	purgeKernelsFromPath(P,Kflibs);
     
    	% Now build path to target function set (could be optimized?)...
    	fdir = [Klib, '/', KernelName];
     
    	%fprintf(['\n *** SETTING KERNEL PATH: ', fdir, '\n'])
     
    	% Now set append function set directory to Matlab's search path...
    	addpath(fdir);
     
    	function purgeKernelsFromPath(P, Kflibs)
    	% Clears Matlab path of any references to MatFMM kernels that may
    	% have been appended during a previous session.
     
    		for flib = Kflibs
     
    			s = flib{:};
     
    			if size(findstr(s,P),2) > 0
    				rmpath(s);
    			end
     
    		end
     
    	end %------------------------------------------------------------------
     
    end %----------------------------------------------------------------------
    et déjà chose très bizarre: deux fonctions dans le même fichier!!! Je croyait que c'était interdit et pourtant le programme semble bien s'executer!

  2. #2
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Tu peux commencer à lire ça : Nested Functions
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  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 302
    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 302
    Points : 53 166
    Points
    53 166
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    "Une fonction imbriquée (nested function en anglais) est une fonction contenue à l'intérieur d'une autre (mère). Elle offre la possibilité de manipuler les variables déclarées dans la fonction mère, et d'appeler les mêmes fonctions qu'elle. On peut avoir autant de niveaux d'imbrication que l'on souhaite."
    - Donc les variables de la fonction mère, qui ont généralement une portée locale peuvent être réutilisées dans la fonction imbriquée
    - "appeler les mêmes fonctions qu'elle" ? Je ne comprends pas, toute fonction peut appeler n'importe quelle fonction du moment que l' on a bien placer le "Folder Path". A moins que l'auteur veuille dire qu'une fonction imbriquée peux appeler les mêmes fonctions imbriquées dans la fonction mère (en plus des fonctions définies dans d'autres fichiers)).

    "À moins de faire passer son handle, elle ne sera pas utilisable par une fonction extérieure." quelle est son utilité alors ? Est ce une sorte de "fonction locale " un peu comme une variable locale, qui n'a d'interet que dans la fonction mère...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    En fait les fonctions imbriqués c'est une sorte d' "héritage"? On hérite des variables locales des parents et on hérite des fonctions aux niveaux supérieures ??

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    C'est plutôt une différence de la portée et de la durée de vie des variables à l'intérieur de la fonction principale.

    Lire la FAQ : Quelle est la durée de vie des variables ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Décalage des champs à l'écriture de deux sources dans un même fichier .csv
    Par justinedr71 dans le forum Développement de jobs
    Réponses: 8
    Dernier message: 27/07/2011, 18h09
  2. Réponses: 9
    Dernier message: 16/02/2010, 19h50
  3. [WD14] Exporter deux tables dans un même fichier Excel
    Par Pownee dans le forum WinDev
    Réponses: 2
    Dernier message: 21/09/2009, 09h10
  4. exporter dans le même fichier xls deux requêtes
    Par schwarzy2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/08/2007, 11h38
  5. Soumettre deux formulaires dans la même fonction.
    Par Bisûnûrs dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/11/2006, 23h18

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