Contenu principal

function

Déclarer le nom, les entrées et les sorties d'une fonction

Description

function [y1,...,yN] = myfun(x1,...,xM) déclare une fonction intitulée myfun qui accepte les entrées x1,...,xM et renvoie les sorties y1,...,yN. Cette instruction de déclaration doit être la première ligne exécutable de la fonction. Les noms de fonctions valides commencent par un caractère alphabétique et peuvent contenir des lettres, des chiffres ou des underscores.

  • S’il y a une seule sortie, les crochets sont facultatifs : function y = myfun(x1,...,xM)

  • S’il n’y a aucune sortie, omettez le signe égal : function myfun(x1,...,xM)

  • S’il n’y a aucune entrée, les parenthèses sont facultatives : function [y1,...,yN] = myfun

Il est possible d’enregistrer vos fonctions :

  • Dans un fichier de fonctions contenant uniquement des définitions de fonctions. Le nom du fichier doit correspondre au nom de la première fonction dans le fichier.

  • Dans un fichier de scripts contenant des commandes et des définitions de fonctions. Les fichiers de scripts ne peuvent pas porter le nom d’une fonction qui s’y trouve.

    Avant R2024a : Les fonctions locales dans les scripts doivent être définies à la fin du fichier, après la dernière ligne du code de script.

Les fichiers peuvent inclure plusieurs fonctions locales ou fonctions imbriquées. Pour des questions de lisibilité, utilisez le mot clé end pour indiquer la fin de chaque fonction dans le fichier. Le mot clé end est requis lorsque :

  • Une des fonctions du fichier contient une fonction imbriquée.

  • La fonction est une fonction locale au sein d’un fichier de fonctions, et qu’une des fonctions du fichier utiliser le mot clé end.

  • La fonction est une fonction locale au sein d’un fichier de scripts.

exemple

Exemples

réduire tout

Définissez une fonction dans un fichier nommé calculateAverage.m qui accepte un vecteur en entrée, calcule la moyenne des valeurs et renvoie un seul résultat.

function ave = calculateAverage(x)
    ave = sum(x(:))/numel(x); 
end

Appelez la fonction depuis la ligne de commande.

z = 1:99;
ave = calculateAverage(z)
ave = 
50

Définissez une fonction dans un fichier nommé stat.m qui renvoie la moyenne et l’écart-type d’un vecteur en entrée.

function [m,s] = stat(x)
    n = length(x);
    m = sum(x)/n;
    s = sqrt(sum((x-m).^2/n));
end

Appelez la fonction depuis la ligne de commande.

values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat(values)
ave = 
47.3400
stdev = 
29.4124

Définissez une fonction dans un fichier nommé plotData.m qui trace les entrées avec des paramètres personnalisés.

function plotData(Xdata,Ydata)
    plot(Xdata,Ydata,Color="black",LineStyle="-.")
end

Appelez la fonction depuis la ligne de commande.

Xdata = 1:100;
Ydata = sin(pi/20*Xdata);
plotData(Xdata,Ydata)

Figure contains an axes object. The axes object contains an object of type line.

Définissez un script dans un fichier nommé integrationScript.m qui calcule la valeur de l’intégrande à $2\pi/3$ ainsi que la zone se trouvant sous la courbe de 0 à $\pi$. Ajoutez une fonction locale qui définit l’intégrande $y = \sin(x)^3$.

% Compute the value of the integrand at 2*pi/3.
x = 2*pi/3;
y = myIntegrand(x)

% Compute the area under the curve from 0 to pi.
xmin = 0;
xmax = pi;
f = @myIntegrand;
a = integral(f,xmin,xmax)

function y = myIntegrand(x)
    y = sin(x).^3;
end
y =

    0.6495


a =

    1.3333

Définissez deux fonctions dans un fichier nommé stat2.m, où la première appelle la deuxième.

function [m,s] = stat2(x)
    n = length(x);
    m = avg(x,n);
    s = sqrt(sum((x-m).^2/n));
end

function m = avg(x,n)
    m = sum(x)/n;
end

La fonction avg est une fonction locale. Les fonctions locales sont uniquement disponibles pour les autres fonctions au sein du même fichier.

Appelez la fonction stat2 depuis la ligne de commande.

values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat2(values)
ave =
   47.3400
stdev =
   29.4124

Définissez une fonction qui restreint l’entrée à un vecteur numérique ne contenant aucun élément Inf ou NaN.

function [m,s] = stat3(x)
    arguments
        x (1,:) {mustBeNumeric, mustBeFinite}
    end
    n = length(x);
    m = avg(x,n);
    s = sqrt(sum((x-m).^2/n));
end

function m = avg(x,n)
    m = sum(x)/n;
end

Dans le bloc de code arguments, (1,:) indique que x doit être un vecteur. Les fonctions de validation {mustBeNumeric, mustBeFinite} restreignent les éléments dans x à des valeurs numériques qui ne sont pas Inf ou NaN. Pour plus d’informations, consultez Function Argument Validation.

Le fait d’appeler la fonction avec un vecteur contenant un élément NaN constitue une violation de la déclaration d’argument de l’entrée. Cette violation produit une erreur provoquée par la fonction de validation mustBeFinite.

values = [12.7, 45.4, 98.9, NaN, 53.1];
[ave,stdev] = stat3(values)
Invalid input argument at position 1. Value must be finite.

Historique des versions

Introduit avant R2006a

développer tout