2012-10-31 65 views
5

可変数の引数(ndgridなど)を持つ関数がある場合、その関数に引数の任意のリストをどのように渡すことができますか?MATLABの関数に未知数の引数を渡すにはどうしたらいいですか?

私は時々私はすなわち、二つの行列をndgridと出すために2つのベクトルを通過するようにしたい例えば

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

しかし、他の回私はより多くのXの場合がありますので、私は

をお勧めします
[X1,X2,X3,X4] = ndgrid(x1,x2,x3,x4) 
  1. 私は、引数の数が不明のリストを格納してからちょうど関数にそのリストを与えるために使用できる構造のいずれかの種類がありますか?そして、
  2. 関数の出力をすべて取得する方法はありますか?その数がわからないときは?
+0

間に合わせの方法は、あなたの入力とレベル出力まで抽象化するだろう(「次元」)と入力の配列を取得し、 [X] = ndgrid(x)ここで、Xとxはセル配列などで、各要素は実際の入力要素となります –

+0

しかし、MATLABに '私はそれがCにコンパイルすることができると確信しています –

+0

ああ、それは非常に簡単です:http://www.mathworks.com/help/matlab/ref/varargin.html –

答えて

5

vararginnarginvarargoutを使用してnargoutあなたは簡単に、可変引数/出力機能を定義することができます。 vararginページについては、付属のMATLABドキュメントのリンクを参照してください。

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

EDIT::他の人は一番下にリンクされているところで、私自身のホーンをプープーしないが、私が「速くて汚い」コメントふふふに提案したと同じように実装しているようです

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 
関連する問題