funciones_anonimas
DESCRIPTION
computacion aplicada a la ingenieriaTRANSCRIPT
1
UNMSM-FQIQ-EAP INGENIERÍA QUÍMICA Computación Aplicada a la Ingeniería
TRADUCCIÓN: PROF. HEBER HELFER
Funciones Anónimas
¿Qué son las Funciones Anónimas?
Una función anónima es una función que no está almacenada en un archivo de programa, sino que
está asociada con una variable cuyo tipo es function_handle. Las funciones anónimas pueden
aceptar entradas y retornar salidas, tal como lo hacen las funciones estándar. Sin embargo, solo
pueden contener una sola sentencia ejecutable.
Por ejemplo, crear un handle a una función anónima que encuentre el cuadrado de un número:
sqr = @(x) x.^2;
La variable sqr es una function handle. El operador @ crea el handle, y los paréntesis ()
immediatamente después del operador @ incluyen los argumentos de entrada de la función. Esta
función anónima acepta una sola entrada x, e implicitamente retorna una sola salida, un arreglo del
mismo tamaño 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
pasaría un argumento de entrada a una función estándar.
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
anónimas o para funciones en archivos de programas. El beneficio del uso de las funciones anónimas
es que usted no tiene que editar y mantener un archivo para una función que solo requiere una
descripción breve.
Por ejemplo, encuentre la integral de 0 a 1 de la función sqr pasando la function handle a la función
integral:
q = integral(sqr,0,1);
Usted no necesita crear una variable en el espacio de trabajo (ventana workspace) para almacenar
una función anónima. En vez de ello, usted puede crear una function handle temporal dentro de una
expresión, tal como esta llamada a la función integral:
q = integral(@(x) x.^2,0,1);
Variables en la Expresión
Las function handles no solo pueden almacenar una expresión, sino que también variables que la
expresión requiere para evaluación
Por ejemplo, crear una function handle a una función anónima que requiera los coeficientes a, b y c.
a = 1.3;
2
UNMSM-FQIQ-EAP INGENIERÍA QUÍMICA Computación Aplicada a la Ingeniería
TRADUCCIÓN: PROF. HEBER HELFER
b = .2;
c = 30;
parabola = @(x) a*x.^2 + b*x + c;
Debido a que a, b, y c están disponibles en el momento que usted crea parabola, la function handle
incluye esos valores. Los valores persisten dentro de la function handle aún 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
sesión siguiente de MATLAB usando las funciones save y load, por ejemplo
save myfile.matparabola
Funciones Anónimas Múltiples
La expresión en una función anónima puede incluir otra función anónima. Esto es útil para pasar
diferentes parámetros a una función que esté evaluando sobre un rango de valores. Por ejemplo,
puede resolver la ecuación
para diferentes valores de c combinando dos funciones anónimas:
g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));
Aquí está cómo derivar esta sentencia:
1. Escriba el integrando como una función anónima,
@(x) (x.^2 + c*x + 1)
2. Evalúe la función desde cero a uno pasando la function handle a integral,
3
UNMSM-FQIQ-EAP INGENIERÍA QUÍMICA Computación Aplicada a la Ingeniería
TRADUCCIÓN: PROF. HEBER HELFER
integral(@(x) (x.^2 + c*x + 1),0,1)
3. Suministre el valor de c construyendo una función anónima para la ecuación entera,
g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));
La función final le permite resolver la ecuación para cualquier valor de c. Por ejemplo:
g(2)
ans =
2.3333
Funciones sin Entradas
Si su función no requiere ninguna entrada, use paréntesis vacíos cuando defina y llame a la función
anónima. Por ejemplo:
t = @() datestr(now);
d = t()
d =
26-Jan-2012 15:11:47
Al omitir los paréntesis en la sentencia de asignación se crea otra function handle, y no se ejecuta la
función:
d = t
d =
@() datestr(now)
Funciones con Múltiples Entradas o Salidas
Las funciones anónimas requieren que usted especifique explícitamente los argumentos de entrada
tal como lo haría para una función estándar, separando las entradas múltiples con comas. Por
ejemplo, esta función acepta dos entradas, x y y:
myfunction = @(x,y) (x^2 + y^2 + x*y);
x = 1;
y = 10;
z = myfunction(x,y)
z =
111
Sin embargo, usted no define explícitamente los argumentos de salida cuando crea una función
anónima. Si la expresión en la función retorna salidas múltiples, entonces usted puede requerirlas
cuando llama a la función. Encierre las variables de salida múltiples entre corchetes.
Por ejemplo, la función ndgrid puede retornar tantas salidas como el número de vectores de entrada.
Esta función anónima que llama a ndgrid tambien puede retornar múltiples salidas:
c = 10;
4
UNMSM-FQIQ-EAP INGENIERÍA QUÍMICA Computación Aplicada a la Ingeniería
TRADUCCIÓN: PROF. HEBER HELFER
mygrid = @(x,y) ndgrid((-x:x/c:x),(-y:y/c:y));
[x,y] = mygrid(pi,2*pi);
Puede usar la salida de mygrid para crear una gráfica de grilla o superficie:
z = sin(x) + cos(y);
mesh(x,y,z)
Arreglos de FuncionesAnónimas
A pesar de que la mayoría 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 múltiples function handles usando un arreglo de celda o un arreglo
de estructura. La aproximación más común 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 código
anterior, o coloque las expresiones dentro de paréntesis tal como
f = {@(x) (x.^2);
@(y) (y + 10);
@(x,y) (x.^2 + y + 10)};
5
UNMSM-FQIQ-EAP INGENIERÍA QUÍMICA Computación Aplicada a la Ingeniería
TRADUCCIÓN: PROF. HEBER HELFER
Acceda a los contenidos de una celda usando llaves. Por ejemplo, f{1} retorna la primera function
handle. Para ejecutar la función, pase los valores de entrada dentro de paréntesis, después 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