Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Funciones anónimas

¿Qué son las funciones anónimas?

Una función anónima es una función que se almacena en un archivo de programa, pero está asociada a una variable cuyo tipo de datos es.notfunction_handle Las funciones anónimas pueden aceptar entradas y salidas de retorno, tal como lo hacen las funciones estándar. Sin embargo, solo pueden contener una sola instrucción ejecutable.

Por ejemplo, cree un identificador para una función anónima que encuentre el cuadrado de un número:

sqr = @(x) x.^2;

Variable es un identificador de función.sqr El operador crea el identificador y los paréntesis inmediatamente después del operador incluyen los argumentos de entrada de función.@()@ Esta función anónima acepta una sola entrada y devuelve implícitamente una única salida, una matriz del mismo tamaño que contiene los valores cuadrados.xx

Busque el cuadrado de un valor determinado () pasando el valor al identificador de función, igual que pasaría un argumento de entrada a una función estándar.5

a = sqr(5)
a =    25

Muchas funciones aceptan identificadores de función como entradas para que pueda evaluar funciones en un rango de valores.MATLAB® Puede crear identificadores para funciones anónimas o para funciones en archivos de programa. La ventaja de usar funciones anónimas es que no tiene que editar y mantener un archivo para una función que requiere solo una breve definición.

Por ejemplo, para buscar la parte integral de la función, pase el identificador de función a la función:sqr01integral

q = integral(sqr,0,1);

No es necesario crear una variable en el espacio de trabajo para almacenar una función anónima. En su lugar, puede crear un identificador de función temporal dentro de una expresión, como esta llamada a la función:integral

q = integral(@(x) x.^2,0,1);

Las variables de la expresión

Los identificadores de función pueden almacenar no solo una expresión, sino también las variables que la expresión requiere para la evaluación.

Por ejemplo, cree un identificador de función para una función anónima que requiera coeficientes y.abc

a = 1.3; b = .2; c = 30; parabola = @(x) a*x.^2 + b*x + c;

Dado que, y están disponibles en el momento de crear, el identificador de función incluye esos valores.abcparabola Los valores persisten dentro del identificador de función incluso si borra las variables:

clear a b c x = 1; y = parabola(x)
y =    31.5000

Para proporcionar valores diferentes para los coeficientes, debe crear un nuevo identificador de función:

a = -3.9; b = 52; c = 0; parabola = @(x) a*x.^2 + b*x + c;  x = 1; y = parabola(1)
y =    48.1000

Puede guardar los identificadores de función y sus valores asociados en un archivo MAT y cargarlos en una sesión posterior con las funciones y, comoMATLABsaveload

save myfile.mat parabola

Utilice únicamente variables explícitas al construir funciones anónimas. Si una función anónima tiene acceso a cualquier variable o función anidada a la que no se hace referencia explícitamente en la lista de argumentos o el cuerpo, produce un error al invocar la función.MATLAB A menudo se encuentran las variables implícitas y las llamadas de función en las funciones como,, y.evalevalinassigninload  Evite el uso de estas funciones en el cuerpo de las funciones anónimas.

Múltiples funciones anónimas

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 en un rango de valores. Por ejemplo, puede resolver la ecuación

para diferentes valores combinando dos funciones anónimas:c

g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));

Aquí es cómo derivar esta declaración:

  1. Escribe el integrando como una función anónima,

    @(x) (x.^2 + c*x + 1)
  2. Evalúe la función de cero a uno pasando el identificador de función a,integral

    integral(@(x) (x.^2 + c*x + 1),0,1)
  3. Proporcione el valor para construir una función anónima para toda la ecuación,c

    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 la función no requiere ninguna de las entradas, utilice paréntesis vacíos al definir y llamar a la función anónima. Por ejemplo:

t = @() datestr(now); d = t()
d = 26-Jan-2012 15:11:47

Si se omite el paréntesis en la instrucción de asignación, se crea otro identificador de función 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 especifique explícitamente los argumentos de entrada como lo haría para una función estándar, separando varias entradas con comas. Por ejemplo, esta función acepta dos entradas y:xy

myfunction = @(x,y) (x^2 + y^2 + x*y);  x = 1; y = 10; z = myfunction(x,y)
z = 111 

Sin embargo, no se definen explícitamente los argumentos de salida cuando se crea una función anónima. Si la expresión de la función devuelve varias salidas, puede solicitarlas cuando llame a la función. Incluya varias variables de salida entre corchetes.

Por ejemplo, la función puede devolver tantas salidas como el número de vectores de entrada.ndgrid Esta función anónima que llama también puede devolver varias salidas:ndgrid

c = 10; mygrid = @(x,y) ndgrid((-x:x/c:x),(-y:y/c:y)); [x,y] = mygrid(pi,2*pi);

Puede utilizar la salida de para crear una gráfica de malla o superficie:mygrid

z = sin(x) + cos(y); mesh(x,y,z)

Matrices de funciones anónimas

Aunque la mayoría de los tipos de datos fundamentales admiten matrices multidimensionales, los identificadores de función deben ser escalares (elementos únicos).MATLAB Sin embargo, puede almacenar varios identificadores de función mediante una matriz de celdas o una matriz de estructura. El enfoque más común es usar una matriz de celdas, como

f = {@(x)x.^2;      @(y)y+10;      @(x,y)x.^2+y+10};

Al crear la matriz de celdas, tenga en cuenta que interpreta los espacios como separadores de columna.MATLAB Omita los espacios de las expresiones, como se muestra en el código anterior, o escriba las expresiones entre paréntesis, como

f = {@(x) (x.^2);      @(y) (y + 10);      @(x,y) (x.^2 + y + 10)};

Acceder al contenido de una celda mediante llaves. Por ejemplo, devuelve el primer identificador de función.f{1} Para ejecutar la función, pase los valores de entrada entre 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

Temas relacionados