要回答标题中的问题:使用以下函数,可以将函数的多个输出重定向到另一个:
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
现在我们可以将它应用于示例:
[~,R] = redirect(@meshgrid,@cart2pol, 2, [1, 2], -2:2, -2:2)
这里,源函数有2个输出,我们想要将输出1和2从源重定向到目标. -2:2是源函数的输入参数.
处理上述示例的其他方法:如果你可以使用GNU Octave,使用bsxfun和nthargout这是你的解决方案:
R = bsxfun(@(a,b) nthargout(2, @cart2pol,a,b),(-2:2)',(-2:2))
在Matlab中,一个可能的解决方案是:
[~, R] = cart2pol(meshgrid(-2:2), transpose(meshgrid(-2:2)))
要么
function R = cart2pol2(m)
[~,R] = cart2pol(m,m')
end
cart2pol2(meshgrid(-2:2, -2:2))