Matlab

MATLABで引数の数が可変の関数を定義する

引数の数を固定せずに使いたい

MATLABで関数を使って計算する機会が増えてくると、次のような問題に直面すると思います。

  • 関数を定義しても使い方が状況によって変わり、毎回変えるのが手間
  • 引数があまりに増えると、記述が現実的でない
  • 引数をまとめて、見た目もスッキリ整えたい

引数の数を可変の関数を定義するには

事前に決まった引数を定義せずに、関数を作りたい場合は、vararginを使います。 varargin{数字}、で「数字」個目の引数を取り出すことができます。 

changable_arg.m

function out = changable_arg(varargin)

arg1 = varargin{1}; % 1つ目の引数を取り出す
arg2 = varargin{2}; % 2つ目の引数を取り出す
arg3 = varargin{3}; % 3つ目の引数を取り出す
out = ****

end
 

 

引数の数を可変の関数の具体例

受け取った全ての引数の総和を出力する関数です。 varargin{:}で引数の全ての値を取り出し、[varargin{:}]として配列に入れています。

 

changable_arg.m

function out = changable_arg(varargin)

arg1 = varargin{1}; % 1つ目の引数を取り出す
arg2 = varargin{2}; % 2つ目の引数を取り出す
arg3 = varargin{3}; % 3つ目の引数を取り出す

fprintf("arg1: %d \n", arg1); %変数の確認
fprintf("arg2: %d \n", arg2); %変数の確認
fprintf("arg3: %d \n", arg3); %変数の確認

in_array = [varargin{:}]; %全ての引数を配列に取り出す

fprintf("in_array:");
disp(in_array) %変数の確認

out = sum(in_array); %変数の総和

 

  次のコードで、上で作ったchangable関数が意図通りに動くか確かめます。 Case1では、3個の引数で、総和は60となるはずです。 Case2では、10個の引数で、総和は55となっていれば良さそうです。

main.m 


fprintf("---Case1--- \n");
result = changable_arg(10, 20, 30);
fprintf("out: %d \n", result)

fprintf("\n\n ")
fprintf("---Case2--- \n");
result = changable_arg(1,2,3,4,5,6,7,8,9,10);
fprintf("out: %d \n", result);

 

 

  main.mの実行結果


>> main
---Case1---
arg1: 10
arg2: 20
arg3: 30
in_array: 10 20 30

out: 60

---Case2---
arg1: 1
arg2: 2
arg3: 3
in_array: 1 2 3 4 5 6 7 8 9 10

out: 55

中間データのarg1, arg2, arg3, 総和(out)は、期待通りの値が得られてそうです。

-Matlab

© 2024 Gohey Blog