Les fonctions sous MATLAB matlabpourtous.com/matlab/la-programmation-sous-matla
Les fonctions sous MATLAB matlabpourtous.com/matlab/la-programmation-sous-matlab/les-fonctions Une fonction est un fichier texte portant l’extension *.m (M-files) et contenant une séquence d’instructions MATLAB. Principes : Permet d’étendre les fonctionnalités de MATLAB; Arguments d’entrée et de sortie (plusieurs entrées et sorties possibles) définis dans un prototype; Espace de travail local à la fonction. Exemple de fonction Nous allons écrire une fonction pour générer un tableau de n nombres aléatoires entiers compris entre 0 et une valeur maximale contenue dans une variable notée max. Fichier rand_int.m function res = rand_int (n, max) % res : tableau de n entiers compris entre 0 et max % "rand" : génère un nombre aléatoire entre 0 et 1 % "floor" : renvoie la partie entière d'un nombre % génération des nombres aleatoires temp = rand (1, n); res = floor ((max + 1).*temp); Détail d’une fonction Prototype de la fonction Définition des arguments de sortie, du nom de la fonction, des arguments d’entrée. Sans cette première ligne, le fichier M correspond plutôt à un fichier script. function res = rand_int (n, max) Description du programme Description détaillée du programme, affichée avec les commandes lookfor et help sur le nom d’un m-file (premier paquet de commentaires sans ligne vide) % res : tableau de n entiers compris entre 0 et max % "rand" : génère un nombre aléatoire entre 0 et 1 % "floor" : renvoie la partie entière d'un nombre Corps de la fonction 1/8 Code du programme (exécute des tâches et affecte des valeurs à toutes les sorties) % génération des nombres aléatoires temp = rand (1, n); res = floor ((max + 1).*temp); Commentaires Texte apparaissant dans le corps de la fonction qui explique les lignes de code intermédiaires (commence toujours avec un pourcentage %). Définition de la fonction La première ligne déclare le nom de la fonction (rand_int), les arguments d’entrées (n, max) et les arguments de sortie (valeur retournées par la fonction, res). Sans cette première ligne, le fichier M correspond plutôt à un fichier script. function res = rand_int (n, max) Nom de la fonction Commence par une lettre Caractères alphanumériques ou underscores Taille limitée (commande namelengthmax) Le nom du fichier M-files doit correspondre au nom de la fonction : rand_int.m Si la fonction possède plusieurs sorties, il faut les énumérer entre crochets, séparés par une virgule. Si la fonction possède plusieurs entrées, il faut les énumérer dans les parenthèses qui suivent le nom de la fonction, séparés par une virgule Exemples : 2 sorties, 2 entrées : function [module, argument] = complexe (a, b) pas de sortie: function affiche_complexe(a, b) Appel d’une fonction L’appel d’une fonction se fait par son nom avec ses entrées et ses sorties. Appel depuis : l’interpréteur MATLAB. une autre fonction 2/8 un script Syntaxe : resultat = nom_fichier (liste des arguments d’appel) L’exemple suivant génère un vecteur aléatoire d’entiers, nommé « nb_alea », de longueur 10 et dont toutes les valeurs sont comprises entre 0 et 50. >> nb_alea = rand_int (10,50) nb_alea = 41 46 6 46 32 4 14 27 48 49 L’exécution d’une fonction s’achève : lorsque la fin du script définissant la fonction à été atteint ; lorsque une commande return ou un appel de la fonction error a été rencontrée ; return termine immédiatement l’exécution de la fonction sans que la fin du script définissant celle-ci ait été atteint ; error(’message’ ) procède de même, mais en plus, affiche le contenu de ’message’. Le contrôle est alors renvoyé au point d’appel de la fonction, fenêtre de commande ou autre fonction. Les sous-fonctions Une sous-fonction est une fonction qui est créée et utilisée dans une même fonction primaire. La fonction primaire est la fonction principale et porte le même nom que le fichier et est déclarée en premier dans le fichier. Les sous-fonctions ne sont visibles que pour la fonction primaire, elles sont déclarées de la même manière que les fonctions primaires. 3/8 function [moy, med] = stat(u) % Fonction primaire % Calculer moyenne et médiane n = length(u); moy = moyenne(u,n); med = mediane(u,n); function m = moyenne(v,n) % Sous-fonction % Calculer la moyenne disp('fonction moyenne') m = sum(v)/n; end function m = mediane(v,n); % Sous-fonction % Calculer la médiane disp('fonction mediane') w = sort(v); if rem(n,2) == 1 % Cas impair m = w((n+1)/2); else % Cas pair m = (w(n/2)+w(n/2+1))/2; end end end stat() est la fonction primaire. moyenne() et mediane() sont les sous-fonctions. Portée d’une variable Les variables dans les fonctions sont par défaut locales à la fonction. function [A,B] = primary(x,y) A = subfun1(x); B = subfun2(y); function v = subfun1(u) v = rand(u,1); function v = subfun2(u) v = randn(u,1); La variable u n’est accessible qu’à l’intérieur de la sous-fonction. 4/8 function T = tax(income) adj_income =... max(income - 6000, 0); T = compute_tax; function t = compute_tax t = 0.28*adj_income; end end la variable adj_income est accessible dans la sous-fonction. Fonction privée Une fonction privée est une fonction créée dans un sous-répertoire nommée private du répertoire contenant la fonction en cours d’exécution. Seules les fonctions du répertoire parent peuvent accéder aux fonctions situées dans le sous-répertoire private. Fonction privée Ordre de recherche d’une fonction Lorsque vous faite appel à une fonction, MATLAB cherche la fonction dans l’ordre suivant : 1. Les sous-fonctions (s’il y en a); 2. Les fonctions privées (sous-répertoire private du répertoire contenant la fonction en cours d’exécution); 3. Les fonctions situées dans le répertoire courant (pas nécessairement celui de la fonction); 4. Les fonctions situées dans les répertoires listés dans le path de MATLAB. Nombre d’arguments variable 5/8 Un des aspects particulier de MATLAB, par rapport à d’autres langages de programmation, réside dans la possibilité d’utiliser et de concevoir des fonctions à nombre d’arguments variable. Dans le corps d’une fonction, les deux commandes nargin et nargout retournent les nombres d’arguments en entrée et en sortie utilisés lors d’une utilisation de cette fonction. En dehors du corps d’une fonction, nargin et nargout indiquent les nombres d’arguments en entrée et en sortie déclarés pour une fonction: >> nargin('rand_int') ans = 2 >> nargout('rand_int') ans = 1 narg est négatif si la fonction fun est déclarée comme ayant un nombre d’arguments variable. Exemple 6/8 function myplot(x, y, couleur, title, xlabel) % MYPLOT Plot a function. % MYPLOT(x, y, couleur, title, xlabel) % The first two input arguments are % required; the other three have default values. if nargin < 5, couleur = ‘b’; end if nargin < 4, title = ‘y=f(x)’; end if nargin < 3, xlabel= ‘x’; end plot(x, y,couleur,title,xlabel) function [x0, y0] = myplot(x, y, couleur, title, xlabel) % MYPLOT Plot a function. % MYPLOT(x, y, couleur, title, xlabel) ... if nargout == 0 plot(x, y) else x0 = x; y0 = y; end Prise en compte des variables de sorties On peut inhiber le calcul d’une variable de sortie en la remplaçant par le symbole ~ : [Kelvin, Fahrenheit]=conversion(Celsius) Renvoie les variables Kelvin et Fahrenheit [~, Fahrenheit]=conversion(Celsius) Renvoie uniquement la variable Fahrenheit Nombre d’arguments variable Les instructions varargin et varargout sont utilisées, uniquement dans le corps d’une fonction, pour passer et retourner des arguments en nombres variables: function y=fun(x,varargin) function [y,varargout]=fun(x) 7/8 Dans la déclaration, chaque instruction doit être écrite en minuscules et doit être la dernière variable de la liste des arguments. Exemple : function myplot(x,varargin) plot(x,varargin{:}) Application : myplot(sin(0:.1:1),'color',[.5 .7 .3],'linestyle',':') 8/8 uploads/Philosophie/ 4-les-fonctions-sous-matlab.pdf
Documents similaires
-
21
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mar 08, 2022
- Catégorie Philosophy / Philo...
- Langue French
- Taille du fichier 0.1717MB