6

当您有一个接受可变数量参数的函数(如 ndgrid)时,如何将任意参数列表传递给该函数?

例如,我想让它有时我将两个向量传递给 ndgrid 并得到两个矩阵,即

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

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

[X1,X2,X3,X4] = ndgrid(x1,x2,x3,x4)
  1. 有什么结构可以用来存储未知数量的参数列表,然后将该列表提供给函数吗?和,
  2. 当您不知道会有多少输出时,有没有办法从函数中检索所有输出?
4

3 回答 3

7

要将可变数量的输入传递给现有函数,请使用带扩展的元胞数组,如下所示:

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));
于 2012-10-31T22:27:41.303 回答
4

使用varargin, nargin,您可以varargout轻松nargout定义可变参数/输出函数。有关 varargin 页面,请参阅随附的 MATLAB 文档链接。其他链接在底部:

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

编辑:顺便说一句,不要自吹自擂,但它似乎就像我在“quick-and-dirty”评论中所建议的那样实施呵呵

于 2012-10-31T20:37:01.793 回答
0

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

function varargout = ndgrid(varargin)    
    varargout = varargin;
return
于 2012-11-01T15:25:24.253 回答