2013-03-07 33 views
5

我希望Matlab能够从一个变量输入函数中返回所有的输出。例如,基于可变数量的输入捕捉所有可能的输出。

[varargout] = cpd_intersect(varargin {:});

这只返回最后的输出,但我知道该函数被定义为给出多个输出。

而不是在[A,B,C ...] = pd_intersect(varargin {:})中定义虚拟变量A,B,C等。我希望像单元格一样存储基于输入数值的所有输出值。我希望这是有道理的。提前谢谢了。

+0

的可能的复制[如果MATLAB函数返回变量值的数量,我怎样才能得到它们作为一个单元阵列?](HTTP:/ /stackoverflow.com/questions/2821644/if-a-matlab-function-returns-a-variable-number-of-values-how-can-i-get-all-of-t) – Brick 2016-06-21 17:24:42

回答

0

您可以通过返回cell array

+2

也许我不是问正确的方式,但我不能预先分配内存到未知大小的单元阵列。我只是想根据输入数量强制所有输出。 – 2013-03-08 07:58:48

0

我看你也不能强迫在Matlab的变量逗号分隔输出列表做到这一点。可怜。这将是有益的。看来我必须明确分配每个输出。这很糟糕,因为我事先不知道我会得到的输出的数量。

+0

是的,这是不可能事先知道输出的数量。 – Navan 2013-03-08 15:32:59

+0

我认为可以使用'nargout(FUNC)' - 查看我的答案 – 2013-08-05 21:45:40

5

我知道这是晚了,但我认为这是你想要什么:

function [varargout] = myfun(f, varargin) 
% apply f to args, and return all its outputs 

[ x{1:nargout(f)} ] = f(varargin{:}); % capture all outputs into a cell array 
varargout = x;      % x{:} now contains the outputs of f 

这里的观点是

  1. NARGOUT可以在功能操作和返回他们的产出
  2. 最大数量
  3. 在左边使用[ X{1:2} ] = ...当X未定义时,相当于[ X{1} X{2} ] = ...,并且可以将2个独立的输出捕获到各个变量中。

两点要注意:

  1. 这个工程的匿名函数呢!例如@(x)eig(x)
  2. 它不适用于使用varargout的函数,即具有真正可变数量输出的函数。如果是这种情况,那么应该有一种方法来计算你将要有多少输出,例如,使用nargin

PS我了解到这个来自@gnovice,If a MATLAB function returns a variable number of values, how can I get all of them as a cell array?