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

Tin*_*gwa 5 variables matlab capture

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

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

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

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

San*_*har 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
Run Code Online (Sandbox Code Playgroud)

这里的见解就是这样

  1. NARGOUT 可以对功能进行操作并返回其最大输出数
  2. [ X{1:2} ] = ...当X未定义时在左侧使用,相当于做[ X{1} X{2} ] = ...,并且可以将2个单独的输出捕获到单个变量中.

有两点需要注意:

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

PS我是从@gnovice学到的,如果一个MATLAB函数返回一个可变数量的值,我怎么能把它们全部作为单元格数组?


Lol*_*olo 0

您可以通过返回元胞数组来完成此操作

  • 也许我没有问正确的方法,但我无法将内存预先分配给未知大小的单元阵列。我只想根据输入数量强制所有输出。 (2认同)