una sirve que programacion para otra matrices llamar hold funciones funcion evaluar ejemplo dentro crear como basicas function matlab arguments anonymous-function

function - sirve - Se busca: Ejemplo de Matlab de una función anónima que devuelve más de 1 salida



input matlab ejemplo (3)

Utilizo funciones anónimas para transformaciones de valores de datos simples. Las funciones anónimas se definen con la siguiente sintaxis

sqr = @(x) x.^2;

Me gustaría tener una función anónima simple que devuelva más de un resultado que se pueda usar de la siguiente manera. . .

[b,a] = myAnonymousFunc(x);

La documentación de Matlab sugiere que esto es posible, pero no da un ejemplo de la sintaxis necesaria para definir dicha función.

http://www.mathworks.co.uk/help/techdoc/matlab_prog/f4-70115.html#f4-71162

¿Cuál es la sintaxis para definir dicha función [ en una sola línea, como el ejemplo de código en la parte superior de mi publicación ]?


¿Esto hace lo que necesitas?

>> f = @(x)deal(x.^2,x.^3); >> [a,b]=f(3) a = 9 b = 27

Con este ejemplo, debe asegurarse de llamar solo a f con exactamente dos argumentos de salida; de lo contrario, se producirá un error.

EDITAR

Al menos con versiones recientes de MATLAB, puede devolver solo algunos de los argumentos de salida usando la sintaxis ~ :

>> [a,~]=f(3) a = 9 >> [~,b]=f(3) b = 27


Puede obtener múltiples salidas de una función anónima si la función a la que se llama devuelve más de una única salida. Vea esta publicación en el blog en el sitio web de MathWorks para ver ejemplos de esto en acción.

Hay dos formas de obtener múltiples salidas de una función anónima:

  • Llamar a una función que devuelve múltiples salidas

    Desde la entrada del blog vinculada a, usan la función eig como tal

    fdoubleEig = @(x) eig(2*x) [e, v] = fdoubleEig(magic(3))

  • Alternativamente, puede construir una función anónima que devuelve múltiples salidas utilizando la función de deal .

    Aquí hay uno que inventé:

    >>> f = @(x, y, z) deal(2*x, 3*y, 4*z) >>> [a, b, c] = f(1, 2, 3) a = 2 b = 6 c = 12

Editar : Como señaló Sam Roberts, y en la publicación de blog a la que me enlace, debe usar la cantidad correcta de argumentos de salida cuando se usa el deal , de lo contrario se produce un error. Una forma de evitar esto es devolver una celda de resultados. Por ejemplo

>>> f = @(x, y, z) {2*x, 3*y, 4*z} >>> t = f(1, 2, 3) >>> [a, b, c] = t{:} a = 2 b = 6 c = 12


Si prefieres no omitir las salidas usando tilde ~ ni generar una matriz de celdas, solo necesitarás una función anónima auxiliar:

deal2 = @(varargin) deal(varargin{1:nargout}); myAnonymousFunc = @(x) deal2(x.^2, x.^3);

entonces puedes obtener solo el primer argumento de salida o ambos primero y segundo:

x = 2; [b,a] = myAnonymousFunc(x) b = myAnonymousFunc(x)

resultados:

b = 4

a = 8

b = 4