0

11 組の入力引数 (プロセスのタイプと入力商品を表す各ペア) を取り、それらの 22 個の値すべてに基づいて結果を計算する関数があります。ただし、関数を柔軟にして、たとえば、11 ではなく 3 ペアの入力引数を使用したい場合でも結果が得られ、その間、未使用の残りの 8 ペアの引数は無視されるようにしたいと考えています。一番簡単な方法を教えてください。

varargin を使用してみましたが、入力引数として 22 未満の値を渡すと、MATLAB は「(関数ファイル内の) インデックス (varargin) が marix の次元を超えている」と通知します。

MATLAB が単純に操作を実行しないように、「非アクティブ」な入力引数を渡す方法はありますか?

ありがとう。

関数ファイル内のコードのサンプルを次に示します。

関数 [ Eprout,AnnEprout,Demand,AnnDemand,Status,AnnStatus ] = supdem(time, country, weights,supdataset,output, demdataset,... process1,process2,process3,process4,process5,process6,process7,process8,process9, process10,process11,... ipcom1,ipcom2,ipcom3,ipcom4,ipcom5,ipcom6,ipcom7,ipcom8,ipcom9,ipcom10,ipcom11)

Eprout = (sum(sum(supdataset(time,country,process1,ipcom1,output)))+sum(sum(supdataset(time,country, process2,ipcom2,output)))+ ... sum(sum(supdataset( time,country,process3,ipcom3,output)))+sum(sum(supdataset(time,country, process4,ipcom4,output)))+ ... sum(sum(supdataset(time,country,process5,ipcom5,output) )))+sum(sum(supdataset(time,country, process6,ipcom6,output)))+... sum(sum(supdataset(time,country,process7,ipcom7,output)))+sum(sum(supdataset) (time,country, process8,ipcom8,output)))+ ... sum(sum(supdataset(time,country,process9,ipcom9,output)))+sum(sum(supdataset(time,country, process10,ipcom10, output)))+... sum(sum(supdataset(time,country,process11,ipcom11,出力))))/1000;

4

1 に答える 1

1

これにはいくつかの方法があります。の簡単な代替手段vararginは、0/1 の値を持つ論理ベクトルを渡すことです。あなたの場合、ベクトルには 11 個のエントリが含まれます。各エントリの値は、その変数ペアが別の配列にあることを期待するかどうかを関数に通知します。関数内に、エントリが 1 か 0 かをチェックする一連のifステートメントを含めることができvます。たとえば、次のようになります。

function  [myoutputs] = myfunction(array_1,array_2,...., v);

default_1 = some_values1; % change some_values1 to whatever should be defaults for variable 2
default_2 = some_values2; % change some_values2 to whatever should be defaults for variable 2

% ... additional default initializations

if v(1)
   pair_1 = array_1;
else
   pair_1 = default_1;
end

% ... if statements for remaining pairs... 

% ... use pair_1 pair_2 ...

たとえば、ベクトルを渡す

 v = [1 zeros(1,9) 1];

最初と最後のパラメーターのペアのみが使用されることを関数に示します。11 ペアを渡す必要がありますが、使用したくないペアの内容は空またはその他の値にすることができます。

于 2013-08-04T13:27:24.967 に答える