如何获得所有输出(MatLab)?

如何获得所有输出(MatLab)?,matlab,output,Matlab,Output,假设我有一个函数,它给出未知数量的输出参数(它取决于输入,因此通过循环进行更改)。如何获得所有这些 nargout没有帮助,因为函数使用了varargout(结果是-1) 当然,我不能重写函数,否则问题就不会出现了:-)在这种情况下,我通常使用的一种方法是将所有输出存储在函数内部的单元格数组中。将单元格数组放在函数体之外,您可以研究它的长度和其他属性。多亏了所有参与讨论的人。总而言之,这个问题似乎没有通用的解决方案,因为MatLab本身在函数调用之前就估计了所需输出的数量。但可以指出三种情况:

假设我有一个函数,它给出未知数量的输出参数(它取决于输入,因此通过循环进行更改)。如何获得所有这些

nargout
没有帮助,因为函数使用了
varargout
(结果是-1)


当然,我不能重写函数,否则问题就不会出现了:-)

在这种情况下,我通常使用的一种方法是将所有输出存储在函数内部的单元格数组中。将单元格数组放在函数体之外,您可以研究它的长度和其他属性。

多亏了所有参与讨论的人。总而言之,这个问题似乎没有通用的解决方案,因为MatLab本身在函数调用之前就估计了所需输出的数量。但可以指出三种情况:

1) 该函数在定义中没有
varargout
,因此
nOut=nargout(@fcn)
返回正数

然后,
nOut
是输出的实际数量,我们可以使用单元格数组和列列表技巧

X=cell(1,nOut);
[X{:}]=fcn(inputs);
2) 函数在定义中有
varargout
,因此
nOut=nargout(@fcn)
返回负数。但是,可以找到与输入的一些相关性(如
length(varargin)=length(varargout)

然后,我们可以根据
输入计算结果
nOut
,并执行上面的列列表技巧

X=cell(1,nOut);
[X{:}]=fcn(inputs);
3) 你知道
fcn
开发者


请他帮忙。例如,将函数的输出设置为单元格数组。

以下是一般情况下处理该问题的方法。我之前没有提到这个解决方案,因为。。。太可怕了

假设函数可以有1个或2个输出参数:

try 
  [a, b] = f(x)
catch
  a = f(x)
end

当然,对于任何数量的输出参数都可以这样做,但您确实不想这样做。

我无法访问函数:-)如果我访问过,就不会出现问题:-)这可能会有帮助,但(当然)需要编辑相关函数。试着将输出分配给单个变量。此变量本身应该是一个单元格数组。找出它的长度。假设这个函数是
unique
,你不知道它有3个输出参数,那么你会如何处理它?@DennisJaheruddin好吧,如果这个函数有3个固定参数(定义为
function[a,b,c]=unique
),那么我就调用
Nout=nargout(unique)
。但是如果函数使用了
varargout
,那么Nout总是变为-1(或者-n,其中n是固定参数的数目)@freude no。在所有情况下,输出都会等待一个类似
[X{:}]
的列表,其中
X=cell(1,Nout)
。但是直到我准确地知道
Nout
之前,一切都不起作用。你知道输入-你是说你不知道函数返回多少输出?输出可能取决于输入,但通常在输入和输出数量之间有一个简单的关系。。。至少对于一个设计合理的函数。尝试将输出分配给单个变量。如果使用varargout,则此变量本身应为单元格数组。找出它的长度。事实上,我正在努力找到一个合理的情况,你不知道会有多少输出。你能举个例子吗?有趣的问题。我不得不猜测,对于这个问题,没有好的通用解决方案。我认为在对函数进行求值之前,必须定义函数调用(与函数定义相反)的输出数。这是由
nargout
的帮助建议的:“在用户定义函数体内部,nargout返回用于调用函数的输出参数数。”(请注意,这指的是在使用
varargout
的函数内部,而不是在您认为它在这里没有真正帮助的函数外部。)@Noxobar IMHO,这是唯一正确的方法。每个编程一个返回变量和未知输出数的函数的人都应该受到惩罚。这将是一个非常糟糕的例子,说明如何使用具有多个输出的功能…我相信这个问题没有合适的通用解决方案,但我确实找到了一个通用的解决方案。