根据可变数量的输入捕获所有可能的输出。

时间:2013-03-07 22:37:55

标签: matlab variables capture

我希望Matlab返回变量输入函数的所有输出。例如,

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

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

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

3 个答案:

答案 0 :(得分:6)

我知道这已经很晚了,但我认为这就是你想要的:

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. 当未定义X时,
  3. 在左侧使用[ X{1:2} ] = ...,相当于执行[ X{1} X{2} ] = ...,并且可以将2个单独的输出捕获到单个变量中。
  4. 需要注意的两点:

    1. 这也适用于匿名函数!例如@(x)eig(x)
    2. 它不适用于使用varargout的函数,即具有真正可变数量输出的函数。如果是这种情况,则应该有一种方法来计算您将拥有多少输出,例如使用nargin
    3. PS我是从@gnovice,If a MATLAB function returns a variable number of values, how can I get all of them as a cell array?

      那里学到的

答案 1 :(得分:0)

您可以通过返回cell array

来执行此操作

答案 2 :(得分:-1)

我看到你无法在Matlab中强制使用变量逗号分隔输出列表。可怜。这会很有用。看来我必须明确分配每个输出。这很糟糕,因为我事先并不知道我会得到的输出数量。