Académique Documents
Professionnel Documents
Culture Documents
Funciones Annimas
Qu son las Funciones Annimas?
Una funcin annima es una funcin que no est almacenada en un archivo de programa, sino que
est asociada con una variable cuyo tipo es function_handle. Las funciones annimas pueden
aceptar entradas y retornar salidas, tal como lo hacen las funciones estndar. Sin embargo, solo
pueden contener una sola sentencia ejecutable.
Por ejemplo, crear un handle a una funcin annima que encuentre el cuadrado de un nmero:
sqr = @(x) x.^2;
La variable sqr es una function handle. El operador @ crea el handle, y los parntesis ()
immediatamente despus del operador @ incluyen los argumentos de entrada de la funcin. Esta
funcin annima acepta una sola entrada x, e implicitamente retorna una sola salida, un arreglo del
mismo tamao de x que contiene los valores cuadrados.
Encuentre el cuadrado de un valor particular (5) pasando el valor a la function handle, tan igual como
pasara un argumento de entrada a una funcin estndar.
a = sqr(5)
a =
25
Muchas funciones MATLAB aceptan function handles como entradas, de modo tal que usted puede
evaluar funciones sobre un rango de valores. Usted puede crear handles ya sea para funciones
annimas o para funciones en archivos de programas. El beneficio del uso de las funciones annimas
es que usted no tiene que editar y mantener un archivo para una funcin que solo requiere una
descripcin breve.
Por ejemplo, encuentre la integral de 0 a 1 de la funcin sqr pasando la function handle a la funcin
integral:
q = integral(sqr,0,1);
Usted no necesita crear una variable en el espacio de trabajo (ventana workspace) para almacenar
una funcin annima. En vez de ello, usted puede crear una function handle temporal dentro de una
expresin, tal como esta llamada a la funcin integral:
q = integral(@(x) x.^2,0,1);
Variables en la Expresin
Las function handles no solo pueden almacenar una expresin, sino que tambin variables que la
expresin requiere para evaluacin
Por ejemplo, crear una function handle a una funcin annima que requiera los coeficientes a, b y c.
a = 1.3;
Debido a que a, b, y c estn disponibles en el momento que usted crea parabola, la function handle
incluye esos valores. Los valores persisten dentro de la function handle an si usted borra las
variables:
clear abc
x = 1;
y = parabola(x)
y =
31.5000
Para proporcionar valores diferentes a los coeficientes, usted debe crear una nueva function handle:
a = -3.9;
b = 52;
c = 0;
parabola = @(x) a*x.^2 + b*x + c;
x = 1;
y = parabola(1)
y =
48.1000
Usted puede guardar function handles y sus valores asociados en un archivo MAT y cargarlo en una
sesin siguiente de MATLAB usando las funciones save y load, por ejemplo
save myfile.matparabola
La funcin final le permite resolver la ecuacin para cualquier valor de c. Por ejemplo:
g(2)
ans =
2.3333
Al omitir los parntesis en la sentencia de asignacin se crea otra function handle, y no se ejecuta la
funcin:
d = t
d =
@() datestr(now)
= 1;
= 10;
= myfunction(x,y)
=
111
Sin embargo, usted no define explcitamente los argumentos de salida cuando crea una funcin
annima. Si la expresin en la funcin retorna salidas mltiples, entonces usted puede requerirlas
cuando llama a la funcin. Encierre las variables de salida mltiples entre corchetes.
Por ejemplo, la funcin ndgrid puede retornar tantas salidas como el nmero de vectores de entrada.
Esta funcin annima que llama a ndgrid tambien puede retornar mltiples salidas:
c = 10;
Puede usar la salida de mygrid para crear una grfica de grilla o superficie:
z = sin(x) + cos(y);
mesh(x,y,z)
Arreglos de FuncionesAnnimas
A pesar de que la mayora de los tipos de datos fundamentales de MATLAB dan soporte a los
arreglos multidimensionales, los function handles deben ser escalares (elementos sencillos). Sin
embargo, usted puede almacenar mltiples function handles usando un arreglo de celda o un arreglo
de estructura. La aproximacin ms comn es usar un arreglo de celda, tal como
f = {@(x)x.^2;
@(y)y+10;
@(x,y)x.^2+y+10};
Cuando crea un arreglo de celda, tenga en cuenta que MATLAB interpreta los espacios como
separadores de columnas. Omita espacios de las expresiones, tales como las mostradas en el cdigo
anterior, o coloque las expresiones dentro de parntesis tal como
f = {@(x) (x.^2);
@(y) (y + 10);
@(x,y) (x.^2 + y + 10)};
Acceda a los contenidos de una celda usando llaves. Por ejemplo, f{1} retorna la primera function
handle. Para ejecutar la funcin, pase los valores de entrada dentro de parntesis, despus de las
llaves:
x = 1;
y = 10;
f{1}(x)
f{2}(y)
f{3}(x,y)
ans =
1
ans =
20
ans =
21
Fuente:
http://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html