MATLAB - Fonctions

Une fonction est un groupe d'instructions qui exécutent ensemble une tâche. Dans MATLAB, les fonctions sont définies dans des fichiers séparés. Le nom du fichier et de la fonction doit être le même.

Les fonctions opèrent sur des variables dans leur propre espace de travail, également appelé local workspace, distinct de l'espace de travail auquel vous accédez à l'invite de commande MATLAB qui s'appelle le base workspace.

Les fonctions peuvent accepter plus d'un argument d'entrée et peuvent renvoyer plusieurs arguments de sortie.

La syntaxe d'une instruction de fonction est -

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

Exemple

La fonction suivante nommée mymax doit être écrite dans un fichier nommé mymax.m . Il prend cinq nombres comme argument et renvoie le maximum des nombres.

Créez un fichier de fonction, nommé mymax.m et tapez le code suivant -

function max = mymax(n1, n2, n3, n4, n5)

%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)
   max = n2;
end
if(n3 > max)
   max = n3;
end
if(n4 > max)
   max = n4;
end
if(n5 > max)
   max = n5;
end

La première ligne d'une fonction commence par le mot-clé function. Il donne le nom de la fonction et l'ordre des arguments. Dans notre exemple, la fonction mymax a cinq arguments d'entrée et un argument de sortie.

Les lignes de commentaire qui viennent juste après l'instruction de fonction fournissent le texte d'aide. Ces lignes sont imprimées lorsque vous tapez -

help mymax

MATLAB exécutera l'instruction ci-dessus et retournera le résultat suivant -

This function calculates the maximum of the
   five numbers given as input

Vous pouvez appeler la fonction comme -

mymax(34, 78, 89, 23, 11)

MATLAB exécutera l'instruction ci-dessus et retournera le résultat suivant -

ans = 89

Fonctions anonymes

Une fonction anonyme est comme une fonction en ligne dans les langages de programmation traditionnels, définie dans une seule instruction MATLAB. Il se compose d'une seule expression MATLAB et d'un nombre quelconque d'arguments d'entrée et de sortie.

Vous pouvez définir une fonction anonyme directement sur la ligne de commande MATLAB ou dans une fonction ou un script.

De cette façon, vous pouvez créer des fonctions simples sans avoir à créer un fichier pour elles.

La syntaxe de création d'une fonction anonyme à partir d'une expression est

f = @(arglist)expression

Exemple

Dans cet exemple, nous écrirons une fonction anonyme nommée power, qui prendra deux nombres en entrée et renverra le premier nombre élevé à la puissance du deuxième nombre.

Créez un fichier de script et tapez le code suivant -

power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)

Lorsque vous exécutez le fichier, il affiche -

result1 =  343
result2 =  7
result3 =  1.0000e-10
result4 =  9.5459

Fonctions principales et sous-fonctions

Toute fonction autre qu'une fonction anonyme doit être définie dans un fichier. Chaque fichier de fonction contient une fonction principale requise qui apparaît en premier et un nombre quelconque de sous-fonctions facultatives qui viennent après la fonction principale et sont utilisées par elle.

Les fonctions primaires peuvent être appelées depuis l'extérieur du fichier qui les définit, soit depuis la ligne de commande, soit depuis d'autres fonctions, mais les sous-fonctions ne peuvent pas être appelées depuis la ligne de commande ou d'autres fonctions, en dehors du fichier de fonction.

Les sous-fonctions ne sont visibles que pour la fonction principale et les autres sous-fonctions du fichier de fonction qui les définit.

Exemple

Écrivons une fonction nommée quadratique qui calculerait les racines d'une équation quadratique. La fonction prendrait trois entrées, le coefficient quadratique, le coefficient linéaire et le terme constant. Cela rendrait les racines.

Le fichier de fonction quadratic.m contiendra la fonction primaire quadratique et le disque de sous-fonction , qui calcule le discriminant.

Créez un fichier de fonction quadratic.m et tapez le code suivant -

function [x1,x2] = quadratic(a,b,c)

%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   % end of quadratic

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end   % end of sub-function

Vous pouvez appeler la fonction ci-dessus à partir de l'invite de commande comme -

quadratic(2,4,-4)

MATLAB exécutera l'instruction ci-dessus et retournera le résultat suivant -

ans = 0.7321

Fonctions imbriquées

Vous pouvez définir des fonctions dans le corps d'une autre fonction. Celles-ci sont appelées fonctions imbriquées. Une fonction imbriquée contient tout ou partie des composants de toute autre fonction.

Les fonctions imbriquées sont définies dans le cadre d'une autre fonction et partagent l'accès à l'espace de travail de la fonction conteneur.

Une fonction imbriquée suit la syntaxe suivante -

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end

Exemple

Réécrivons la fonction quadratique , de l'exemple précédent, cependant, cette fois, la fonction disque sera une fonction imbriquée.

Créez un fichier de fonction quadratic2.m et tapez le code suivant -

function [x1,x2] = quadratic2(a,b,c)
function disc  % nested function
d = sqrt(b^2 - 4*a*c);
end   % end of function disc

disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   % end of function quadratic2

Vous pouvez appeler la fonction ci-dessus à partir de l'invite de commande comme -

quadratic2(2,4,-4)

MATLAB exécutera l'instruction ci-dessus et retournera le résultat suivant -

ans =  0.73205

Fonctions privées

Une fonction privée est une fonction principale qui n'est visible que par un groupe limité d'autres fonctions. Si vous ne souhaitez pas exposer l'implémentation d'une ou plusieurs fonctions, vous pouvez les créer en tant que fonctions privées.

Les fonctions privées résident dans subfolders avec le nom spécial private.

Ils ne sont visibles que pour les fonctions du dossier parent.

Exemple

Réécrivons la fonction quadratique . Cette fois, cependant, la fonction disque calculant le discriminant sera une fonction privée.

Créez un sous-dossier nommé privé dans le répertoire de travail. Stockez le fichier de fonction suivant disc.m dedans -

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end      % end of sub-function

Créez une fonction quadratic3.m dans votre répertoire de travail et tapez le code suivant -

function [x1,x2] = quadratic3(a,b,c)

%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficient of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 

x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end      % end of quadratic3

Vous pouvez appeler la fonction ci-dessus à partir de l'invite de commande comme -

quadratic3(2,4,-4)

MATLAB exécutera l'instruction ci-dessus et retournera le résultat suivant -

ans =  0.73205

Variables globales

Les variables globales peuvent être partagées par plus d'une fonction. Pour cela, vous devez déclarer la variable comme globale dans toutes les fonctions.

Si vous souhaitez accéder à cette variable depuis l'espace de travail de base, déclarez la variable sur la ligne de commande.

La déclaration globale doit se produire avant que la variable ne soit réellement utilisée dans une fonction. Il est recommandé d'utiliser des lettres majuscules pour les noms des variables globales afin de les distinguer des autres variables.

Exemple

Créons un fichier de fonction nommé average.m et tapez le code suivant -

function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end

Créez un fichier de script et tapez le code suivant -

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)

Lorsque vous exécutez le fichier, il affichera le résultat suivant -

av =  35.500