7

シンボリックツールボックスを使用してmatlab関数を生成しています。ただし、生成される関数への入力の数は、必要なオブジェクトの数(スイッチの数など)によって異なります。2および3スイッチの場合、生成される関数は次のようになります。

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

この関数を使用するスクリプトでは、これらのパラメーターのベクトルを確立します。

a = [a1 a2 ...]

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

4

2 に答える 2

12

{:}おそらくセル配列と演算子を探します。セルの内容をカンマ区切りのリストに変更します。結果は、パラメーターとして関数に渡すことができます。例えば:

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
于 2012-10-05T08:59:23.893 に答える
2

を使用して、可変数の入力引数を持つ関数を作成できますvarargin

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

% your code comes hereafter
于 2012-10-05T08:10:02.303 に答える