Matlab 定义具有多个输出的函数,这些输出可以';不能组织成矩阵

Matlab 定义具有多个输出的函数,这些输出可以';不能组织成矩阵,matlab,function,output,containers,grouping,Matlab,Function,Output,Containers,Grouping,是否有任何自然的方法来定义一个具有多个输出的MATLAB函数,而这些输出不能或不适合“叠加”到矩阵中?例如,如果我想要一个函数f,它返回一个3x3矩阵a和一个4x4矩阵B 我真的很惊讶,这甚至会成为MATLAB中的一个问题。因为在Python中,我们需要做的就是返回A,B,它返回两个元组。然而,MATLAB似乎并不完全支持容器的概念。作为一种非优雅的解决方法,我可以使用struct将两段数据放入,函数如下所示: function re = f(x) %f: returns two dimensi

是否有任何自然的方法来定义一个具有多个输出的MATLAB函数,而这些输出不能或不适合“叠加”到矩阵中?例如,如果我想要一个函数
f
,它返回一个
3x3
矩阵
a
和一个
4x4
矩阵
B

我真的很惊讶,这甚至会成为MATLAB中的一个问题。因为在Python中,我们需要做的就是
返回A,B
,它返回两个元组。然而,MATLAB似乎并不完全支持容器的概念。作为一种非优雅的解决方法,我可以使用
struct
将两段数据放入,函数如下所示:

function re = f(x)
%f: returns two dimensional-inconsistent matrices A and B
% function body as follows
....  
A = ...;
B = ...;

% put data into the struct 're'
re.A = A;
re.B = B;
end

除了可能的性能问题外,这种方法看起来非常不自然和笨拙。有更好的方法吗?

在MATLAB中,您可以使用以下语法返回任意数量的输出:

function [A,B] = f(x)
  A = ...;
  B = ...;
end
这是一个比python中使用的元组更优雅的解决方案。 您甚至可以通过输入和输出的数量来控制行为(
nargin
nargout
),并使用波浪线丢弃输出。
我想不出更优雅的语法了。

通常,当有多个输出时,应该按如下方式声明函数:

function [out1, out2, ... , outN] = funcName(in1,...,inM)
...
end
MATLAB还允许您分别根据通过/函数请求的输入/输出量来改变函数的行为(您可以将其视为一种重载形式)

例如,您可以指定一个数组作为输入之一,该数组指示您希望函数给出哪些输出,然后相应地填充单元格数组:

function varargout = funcName(in1,...,whichOut)
...
for indO = 1:numel(whichOut)
  switch whichOut{indO}
    case 'out1'
      varargout{indO} = out1;
    case 'out2' 
      ... etc
    case 'out6'
      varargout{indO} = out6;
  end
end
然后使用
[out6,out1]=funcName(inp,{'out6','out1'})调用它


另请参见。

我不理解这个问题,只需将输出定义为[A,B]当然?@nkjt很抱歉,我在考虑如何使其像Python一样工作。是的,你完全正确。只是在matlab中,如果我只想访问函数的第二个输出,我需要付出更多的努力,就像在这个例子中,
[~,second\u out]=f(x)而在Python中,我只能执行
second\u out=f(x)[1]
。Matlab不太支持容器的概念。与Python的列表或元组(可能是异构事物的容器)等效的是,我想不出更优雅的语法:-D