2012-10-05 23 views
6

私は、MATLAB関数を生成するために記号ツールボックスを使用しています。しかし、生成される関数への入力数は、必要なオブジェクトの数(例えば、スイッチの数)によって変化します。 2と3のために生成された関数の外観がこれを好きなスイッチ:この機能を使用してスクリプトでMatlabでさまざまなパラメータの関数を呼び出す

y = fun(a1,a2,b1,b2) 
y = fun(a1,a2,a3,b1,b2,b3) 

私は、これらのパラメータのベクトルを確立します。私が欲しいもの

a = [a1 a2 ...] 

は直接生成された関数を呼び出すことのいずれかでありますまたはラッパー関数を作成して、スイッチの数を変更するときに呼び出しステートメントを変更する必要はありません。この問題をさらに複雑にするために、これらの変数はACADO変数です。つまり、行列演算と要素演算はできません(つまり、すべての数学演算はスカラーで行う必要があり、シンボリックツールボックスの方程式はスカラーのために書かなければなりません)。

答えて

11

おそらく、セル配列と{:}演算子を探します。セルの内容をcoma separated listに変更します。結果はパラメータとして関数に渡すことができます。

v2 = {a1, a2, b1, b2}; 
v3 = {a1, a2, a3, b1, b2, b3}; 

そして例の機能:たとえば

function fun(varargin) 
    display(['number of parameters: ' num2str(nargin)]); 

あなたは

fun(v2{:}) 
number of parameters: 4 

fun(v3{:}) 
number of parameters: 6 
2

可変数の入力引数を持つ関数をvararginで作成することができます。

function fun(varargin) 
a = cell2mat(varargin); % works only if arguments indeed only consists of scalars. 

% your code comes hereafter 
+1

を次のように私はそれが私を解決しないと思う「透過」パラメータの数が異なるために関数を呼び出すことができますなぜなら、それはシンボリックツールボックス(http://www.mathworks.se/help/symbolic/matlabfunction.html)によって生成されるからです。 varginを使用しようとしましたが、動作させることができません: f = @(x、y)(x + y); vargin {1} = 1; vargin {2} = 2; f(vargin) –

+1

@angainorによって提供される回答はおそらくあなたが行くべき方法です。 –

関連する問題