Fonction paramètre d'entrée d'une autre fonction

Certaines fonctions prédéfinies de MATLAB attendent en paramètre d'entrée une fonction définie par l'utilisateur. C'est par exemple le cas en calcul numérique où des fonctions MATLAB codant des algorithmes attendent en entrée une fonction dans laquelle l'utilisateur a programmé les équations spécifiques au problème numérique qu'il désire traiter.

Sinon, vous pouvez être amenés à créer des fonctions capables d'avoir en paramètres d'entrée d'autres fonctions.

Nous allons voir ici deux méthodes pour passer une fonction comme paramètre d'entrée.

Méthode

Si la fonction utilisateur est définie dans un fichier alors il est nécessaire comme argument de :

  • soit spécifier le nom de la fonction comme une chaîne de caractères, c'est-à-dire entre quottes (guillemets simples),

  • soit fournir un pointeur sur la fonction par l'intermédiaire du caractère @.

Si la fonction utilisateur est définie comme fonction anonyme alors il faut fournir en argument un pointeur sur la fonction.

Exemple

On cherche la racine d'une équation algébrique par l'intermédiaire de la fonction MATLAB fzero. Si l'équation a été codée dans une fonction monequation enregistrée dans un fichier nommé monEquation.m, alors fzero peut être employée ainsi :

1
>> racine = fzero('monEquation', x0) ;

ou ainsi :

1
>> racine = fzero(@monEquation, x0) ;

Remarque

x0 correspond à la valeur initiale avec laquelle sont démarrés les calculs.

Méthode

Si vous définissez vous-même la fonction qui va utiliser une autre fonction comme paramètre d'entrée, il est nécessaire d'utiliser la fonction feval pour évaluer la valeur de la fonction utilisateur.

Exemple

Soit la fonction derive écrite pour approximer numériquement la dérivée d'une fonction mathématique codée dans une autre fonction.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%% derive.m
% Fabien Baillon et Jean-Louis Dirion - Novembre 2014
%
% La fonction derive permet d'approximer la dérivée d'une fonction mathématique
% en un point spécifié
%
% entrées : fonc, fonction f(x)
%            x, valeur où la dérivée est calculée
% sortie :  df, valeur de la dérivée
  
function df = derive(fonc,x)
    h=1.e-6;
    f1=feval(fonc,x+h);
    f0=feval(fonc,x-h);
    df=(f1-f0)/2/h;
end

Si la fonction dont on cherche à approximer la dérivée en x=2 est définie dans une fonction f (sauvegardée dans un fichier f.m), l'appel de la fonction se fait alors ainsi :

1
>> valDerive = derive('f',2)

Remarque

Si l'appel se fait par l'intermédiaire d'un pointeur alors l'utilisation de feval n'est pas nécessaire.

Complément

Lorsque l'on passe le nom d'une fonction en paramètre d'une fonction, cette dernière reçoit en paramètre une chaîne de caractères contenant le nom de la fonction. La commande feval permet d'évaluer la fonction à partir de son nom.

À l'inverse, lorsque l'on utilise l'appel par pointeur @, la fonction qui prend ce pointeur comme argument reçoit directement un pointeur qui pointe sur la fonction, et non sur son nom.