Passer une fonction à une autre fonction
Il est possible d’utiliser des handles de fonction comme arguments en entrée d’autres fonctions appelées fonctions de fonctions. Ces fonctions évaluent des expressions mathématiques sur une plage de valeurs. Les fonctions de fonctions sont notamment integral
, quad2d
, fzero
et fminbnd
.
Par exemple, pour calculer l’intégrale du logarithme népérien entre 0 et 5, passez un handle vers la fonction log
à la fonction integral
.
a = 0; b = 5; q1 = integral(@log,a,b)
q1 = 3.0472
De la même manière, pour calculer l’intégrale des fonctions sin
et exp
, passez les handles vers ces fonctions à la fonction integral
.
q2 = integral(@sin,a,b)
q2 = 0.7163
q3 = integral(@exp,a,b)
q3 = 147.4132
Il est également possible de passer un handle vers une fonction anonyme à des fonctions de fonctions. Une fonction anonyme est une fonction MATLAB® d’une seule ligne basée sur une expression et ne nécessitant pas de fichier de programme. Par exemple, évaluez l’intégrale de sur la plage [0,Inf]
:
fun = @(x)x./(exp(x)-1); q4 = integral(fun,0,Inf)
q4 = 1.6449
Les fonctions qui acceptent une fonction en entrée (appelées fonctions de fonctions) nécessitent que la fonction associée au handle comporte un certain nombre de variables en entrée. Par exemple, si vous appelez integral
ou fzero
, la fonction associée au handle doit comporter une et une seule variable en entrée. Si vous appelez integral3
, la fonction associée au handle doit comporter trois variables en entrée. Pour plus d’informations sur l’appel de fonctions de fonctions comportant un plus grand nombre de variables, consultez Parameterizing Functions.
Vous pouvez écrire des fonctions acceptant les handles de fonction de la même manière que vous écrivez des fonctions acceptant d’autres types d’entrées. Écrivez une fonction qui multiplie par deux la sortie du handle de fonction en entrée pour une entrée donnée.
function x = doubleFunction(funHandle,funInput) x = 2*funHandle(funInput); end
Testez cette fonction en indiquant un handle de fonction en entrée.
x = doubleFunction(fun,4)
x = 0.1493