web-dev-qa-db-ja.com

MATLAB関数のオプションの引数

オプションの引数を使用してMATLABで関数を宣言するにはどうすればよいですか?

例:function [a] = train(x, y, opt)、optはオプションの引数である必要があります。

58
Yekver

これを行う方法にはいくつかの異なるオプションがあります。最も基本的なのは、 varargin を使用し、次にnarginsizeなどを使用して、オプションの引数が関数に渡されたかどうかを判断することです。 。

% Function that takes two arguments, X & Y, followed by a variable 
% number of additional arguments
function varlist(X,Y,varargin)
   fprintf('Total number of inputs = %d\n',nargin);

   nVarargs = length(varargin);
   fprintf('Inputs in varargin(%d):\n',nVarargs)
   for k = 1:nVarargs
      fprintf('   %d\n', varargin{k})
   end

もう少しエレガントな外観のソリューションは、 inputParser クラスを使用して、関数で必要なすべての引数(必須およびオプション)を定義することです。 inputParserを使用すると、すべての引数に対して型チェックを実行することもできます。

42
Praetorian

これを行う簡単な方法は、nargin(N個の引数)を使用することです。欠点は、引数リストとnarginチェックが一致することを確認する必要があることです。

すべての入力はオプションですが、設定されていない変数を呼び出すと、関数はエラーで終了することを覚えておく価値があります。次の例では、bとcのデフォルトを設定します。が存在しない場合は終了します。

function [ output_args ] = input_example( a, b, c )
if nargin < 1
  error('input_example :  a is a required input')
end

if nargin < 2
  b = 20
end

if nargin < 3
  c = 30
end
end
47
Morgan

これを行う良い方法は、narginを使用するのではなく、exist('opt', 'var')を使用して変数が設定されているかどうかを確認することです。

例:

function [a] = train(x, y, opt)
    if (~exist('opt', 'var'))
        opt = true;
    end
end

この方法の長所については、この回答を参照してください: 関数呼び出しで引数が指定されているかどうかを確認する方法?

39
Evgeni Sergeev