MATLAB函数中的可选参数

时间:2011-07-20 15:05:03

标签: function math matlab parameters arguments

如何在MATLAB中用可选参数声明函数?

例如:function [a] = train(x, y, opt),其中opt必须是可选参数。

3 个答案:

答案 0 :(得分:46)

这样做的一个简单方法是通过nargin(N个参数)。缺点是你必须确保你的参数列表和nargin检查匹配。

值得记住的是,所有输入都是可选的,但如果调用未设置的变量,则函数将以错误退出。以下示例为b和c设置默认值。如果a不存在,将退出。

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

答案 1 :(得分:42)

如何做到这一点有几个不同的选择。最基本的是使用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还允许您对所有参数执行类型检查。

答案 2 :(得分:36)

解决此问题的一个好方法是不使用nargin,而是检查变量是否已使用exist('opt', 'var')设置。

示例:

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

有关这样做的专业人士,请参阅此答案:How to check whether an argument is supplied in function call?