Referencias de función

Anuncio
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
Descargar