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.