scripts script inside for matlab function arguments octave

matlab - for - octave function inside script



¿Cómo pasar directamente múltiples salidas de una función a otra? (1)

Para responder la pregunta en el título: Usando la siguiente función, es posible redirigir múltiples salidas de una función a otra:

function varargout = redirect(source, destination, n_output_source, which_redirect_from_source, varargin) %(redirect(source, destination, n_output_source, which_redirect_from_source,....) %redirect output of a function (source) to input of another function(destination) % source: function pointer % destination: function pointer % n_output_source: number of outputs of source function (to select best overload function) % which_redirect_from_source: indices of outputs to be redirected % varargin arguments to source function output = cell(1, n_output_source); [output{:}] = source(varargin{:}); varargout = cell(1, max(nargout,1)); [varargout{:}] = destination(output{which_redirect_from_source}); end

Y ahora podemos aplicarlo al ejemplo:

[~,R] = redirect(@meshgrid,@cart2pol, 2, [1, 2], -2:2, -2:2)

Aquí, la función fuente tiene 2 salidas y queremos redirigir las salidas 1 y 2 desde el origen hasta el destino. -2: 2 es el argumento de entrada de la función fuente.

Otra forma de lidiar con el ejemplo mencionado: si puede usar GNU Octave, con bsxfun y nthargout esta es su solución:

R = bsxfun(@(a,b) nthargout(2, @cart2pol,a,b),(-2:2)'',(-2:2))

en Matlab una posible solución es:

[~, R] = cart2pol(meshgrid(-2:2), transpose(meshgrid(-2:2)))

o

function R = cart2pol2(m) [~,R] = cart2pol(m,m'') end cart2pol2(meshgrid(-2:2, -2:2))

Permítanme elaborar con ejemplos: sabemos cómo combinar funciones fácilmente con un solo resultado:

a = sin(sqrt(8));

Ahora considere este código de ejemplo que contiene dos pasos para calcular R , con X e Y como salidas intermedias.

[X, Y] = meshgrid(-2:2, -2:2); [~, R] = cart2pol(X, Y);

En general, ¿hay alguna forma de combinar las dos funciones y deshacerse de las salidas intermedias? Por ejemplo, ¿cómo puedo escribir algo similar a [~, R] = cart2pol(meshgrid(-2:2, -2:2)) que funciona igual que el código anterior?

Nota: Lo que hace que mi pregunta sea diferente de esta pregunta es que en mi caso la función externa acepta entradas múltiples. Por lo tanto, no puedo y no quiero combinar las salidas de la primera función en una matriz de células. Quiero que pasen a la segunda función por separado.