我希望 Matlab 返回变量输入函数的所有输出。例如,
[varargout]=cpd_intersect(varargin{:});
这仅返回最后一个输出,但我知道该函数被定义为提供多个输出。
而不是在 [A,B,C...]=pd_intersect(varargin{:}) 中定义虚拟变量 A、B、C 等。我想要一个像单元格一样的东西来存储基于输入值的所有输出值。我希望这是有道理的。提前谢谢了。
我知道这已经晚了,但我认为这就是你想要的:
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
这里的见解是
NARGOUT
可以对函数进行操作并返回它们的最大输出数[ X{1:2} ] = ...
当 X 未定义时在左侧使用 using ,相当于 do [ X{1} X{2} ] = ...
,并且可以将 2 个单独的输出捕获到单独的变量中。需要注意的两点:
@(x)eig(x)
varargout
,即具有真正可变数量输出的函数。如果是这种情况,那么应该有一种方法来计算您将拥有多少输出,例如使用nargin
.PS 我从@gnovice 学到了这一点,如果 MATLAB 函数返回可变数量的值,我怎样才能将它们全部作为一个单元格数组?
您可以通过返回一个元胞数组来做到这一点
我看到您不能在 Matlab 中强制使用变量逗号分隔的输出列表。遗憾。这会很有用。看来我必须明确分配每个输出。这很糟糕,因为我事先不知道我会得到多少输出。