2012-10-31 126 views
5

当你有一个函数需要一个可变数量的参数(如ndgrid)时,如何将任意参数列表传递给该函数?如何将一组未知数量的参数传递给MATLAB中的函数?

比如我想让它这样,有时我通过两个向量来ndgrid,并得到了两个矩阵,即

[X1,X2] = ndgrid(x1,x2); 

但其他时候,我可能有更多的X的,所以我想

[X1,X2,X3,X4] = ndgrid(x1,x2,x3,x4) 
  1. 有什么样的结构,我可以用它来存储一个参数数目未知的列表,然后只给该列表的功能?而且,
  2. 有没有办法从函数中检索所有的输出,当你不知道会有多少?
+0

一个快速和肮脏的方法是抽象的输入和输出一个电平(“尺寸”),并利用输入阵列和输出一个数组 - 也就是[X] = ndgrid(x)其中X和x是单元格数组或其他东西,每个元素都有一个实际的输入元素 –

+0

然而,我不够精通, varargs'类型的功能(我确信它可以编译为C) –

+0

哦,它非常简单:http://www.mathworks.com/help/matlab/ref/varargin.html –

回答

5

使用vararginnarginvarargoutnargout可以很容易地定义可变参数/输出功能。查看附带的可用于varargin页面的MATLAB文档链接。

http://www.mathworks.com/help/matlab/ref/varargin.html

编辑:别人都在底部链接BTW,不嘟我自己的号角,但它似乎可以实现,正如我在“快速和肮脏”的评论呵呵呵曾建议

6

要通过在输入到一个现有的功能的可变数量,使用单元阵列与扩展,这样的:

x = 1:10; 
y = randn(size(x)); 
plotArguments = {'color' 'red' 'linestyle' '-'}; 
plot(x, y, plotArguments{:}); 

plotArguments = {1:10 randn(1,10) 'color' 'red' 'linestyle' '-'}; 
plot(plotArguments{:}); 

您可以使用相同的技巧来接收多个输出。唯一困难的部分是记住正确的符号。

numArgumentsToAccept = 2; 
[results{1:numArgumentsToAccept }] = max(randn(100,1)); 
+0

谢谢!这正是我所期待的。我认为它与单元阵列有关,但我不知道符号。 – rkp

0

返回所有参数作为输出的函数:

function varargout = ndgrid(varargin)  
    varargout = varargin; 
return 
相关问题