Referencias de función Function handles • Es un nuevo mecanismo para referirse a un nombre de función • Admite funciones sobrecargadas. (Mismo nombre con distintos tipos de argumentos) • Principal uso: pasar a una función (llamada función de función) el nombre de otra. Ejemplo: la función quad • Calcula mediante métodos numéricos integrales definidas de una función >> area=quad('sin',0,pi) area =2.0000 • A partir de la versión de Matlab 6.0 se hace de la siguiente forma: >>fh=@sin; area=quad(fh,0,pi); donde fh se llama referencia de función Creación de referencias de función • Dos formas: – Mediante el operador @: >>fh = @sin; >>area = quad(@sin, 0, pi); – Mediante la función srt2func: • Entrada: cadena de caracteres (menos de 31), con el nombre de la función. • Salida: la referencia de función • Ventaja: puede recibir un vector cuyas componentes son los caracteres de los nombres de las funciones. Ejemplo str2fun >> fh = str2func('sin'); >> str2func({'sin','cos','tan'}) ans =@sin @cos @tan Evaluación de funciones mediante referencias • Para evaluar una referencia de función, Matlab utiliza la función feval de la forma: – [r1, r2, r3, ...] = feval(fh, arg1, arg2, arg3, ...) • fh, es la referencia de función y sólo puede ser una • r1,r2,.. Valores de retorno • arg1,arg2,… argumentos de fh Cuando se ejecute feval, fh debe estar en el mismo directorio. • Se puede ejecutar una sub-función desde otra definida en un fichero *.m diferente: % fichero pruebafh.m function mifh=pruebafh mifh=@subf; % fichero subf.m function A=subf(B, C) A=B+C; • Pruebafh devuelve una referencia a la sub-función subf. % fichero pruebafhMain.m fh=pruebafh A=rand(3); B=eye(3)*10; C=feval(fh,A,B) • La principal utilidad de las referencias de función: – pasar información de una función a otras funciones, las cuales la ejecutan por medio de feval. Ejemplo: quad, qaudl,.. • Funciones anónimas, para crear funciones sobre la marcha: fhandle = @(argumentos) expresión; – Ejemplo: senoAngDoble = @(ang) 2*sin(and).*cos(ang); • Funciones escalares: >>ff=@(x,y)(x.^2+y.^2-1) Podemos evaluar >>ff(1,-2); ff([1,2],[3,4]); • Funciones vectoriales: >>ff=@(x,y)([3.*x+y, y.^2]); >>ff(1,2);ff([1 2 3],[4 5 6]); Quad y quadl • Quad(fun,A,B), intenta aproximar la integral de la función fun en [A,B] con error de 10^-6 usando Simpson – Fun es una referencia de función. – Quad(fun,A,B,tol,trace) • Quadl(fun,A,B), aproxima la integral de la función fun en [A,B] usando Lobatto – Quad(fun,A,B,tol), cambia la tolerencia por defecto (10^-6) por la de entrada tol