6

可変量の引数を取る関数 (ndgrid など) がある場合、その関数に引数の任意のリストを渡すにはどうすればよいでしょうか?

たとえば、2 つのベクトルを ndgrid に渡して 2 つの行列を取得できるようにしたいと考えています。

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

しかし、それ以外の場合は、もっと X があるかもしれないので、

[X1,X2,X3,X4] = ndgrid(x1,x2,x3,x4)
  1. 不明な数の引数のリストを格納し、そのリストを関数に渡すために使用できる構造はありますか? と、
  2. 関数の出力がいくつあるかわからない場合に、関数からすべての出力を取得する方法はありますか?
4

3 に答える 3

7

可変数の入力を既存の関数に渡すには、次のように cell 配列を展開して使用します。

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

vararginnarginvarargoutおよびを使用すると、nargout可変引数/出力関数を簡単に定義できます。varargin ページについては、添付の MATLAB ドキュメント リンクを参照してください。他のものは下部にリンクされています:

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

編集:ところで、私自身のホーンを鳴らすのではなく、「クイックアンドダーティ」コメントで提案したのと同じように実装されているようです

于 2012-10-31T20:37:01.793 に答える
0

すべての引数を出力として返す関数:

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