Matlab

MATLABの関数ファイルを単体で実行する

MATLABの関数ファイルを単体で実行できない理由

MATLABは、メインファイルと関数ファイルを別々に扱うため、関数ファイルだけ実行しようとしても、引数が定義されていないと残念ながら動きません。

次のように"Not enough input arguments."と表示されてしまいます。

narginがない場合のエラーメッセージ

 

MATLABの関数ファイルを単体で実行するには

引数がない場合には、代わりにこれを使ってねと示してあげれば問題なく動きます。
引数の状態を確認するには、narginを使います。

fn_adder.m

function [out_c] = my_function(in_a, in_b)
 
 if nargin==0
     in_a = ***;
     in_b = ***;
 end
 
*** 任意の処理 ***
 
end

 

コードの具体例

簡単な関数で具体例を示すと次のようなものになります。

fn_adder.m

function [c] = fn_adder(a, b)
 
 if nargin==0
     a = 2;
     b = 3;
 end
 
 c = a + b;
end

 

fn_adder.mの実行結果

 

- 関数ファイルの通常読み出し

narginを追記した関数ファイルは、もちろん通常通り別のファイルからの参照も可能です。

main.m

for idx=1:5
    a = idx;
    b = idx*idx;
    c = fn_adder(a,b);
    fprintf("idx:%d, a:%d, b:%d, c:%d \n", idx, a, b, c);
end

 

main.mの実行結果

この動作の場合、引数固定になりますが、暫定の動作確認としては十分に使えると思います。
(様々な引数に対して動作確認したい場合は、素直にスクリプトファイルから参照して使うのが良さそうですね)

その他解説

- MATLABのスクリプトと関数(fnファイル)

上にも書きましたが、MATLABで関数を作成する時には、ベタ書きのスクリプトファイルと分けて、別ファイルで作成しましょうというルールがあります。

※R2016a以降だと、スクリプトファイルに関数を入れることができるようです。MathWorks function
とはいえ、今も関数ファイルを分けて書かれる方が多いのではないでしょうか。

関数ファイルを分けることで、管理しやすい一方で、関数単体をそのまま実行しようとするとエラーとなってしまいます。
初心者がデバッグをする際に、困る箇所の一つではないでしょうか。

見たい場所を絞って原因分析や詳細解析を効率的に行っていきましょう。

-Matlab

© 2024 Gohey Blog