2011-07-20 87 views
48

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

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

+1

可能重复http://stackoverflow.com/questions/795823/默认参数在matlab中),[Matlab的等效Python的“无”](http://stackoverflow.com/questions/1737523/the-matlab-equivalent-of-pythons-none),[如何处理在MATLAB中函数参数的名称/值对](http://stackoverflow.com/questions/2775263/how-to-deal-with-name-value-pairs-of-function-arguments-in-matlab) – Amro

+1

好的讨论这个h去http://blogs.mathworks.com/pick/2010/04/02/setting-default-values/和这里http://blogs.mathworks.com/loren/2009/05/05/nice-way-to -set-功能的默认值/ –

回答

34

关于如何做到这一点,有几个不同的选项。最基本的是使用varargin,然后使用nargin,size等来确定是否已将可选参数传递给该函数。

% 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还允许您对所有参数执行类型检查。

36

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

值得记住的是,所有输入都是可选的,但如果函数调用未设置的变量,则函数将返回一个错误。以下示例为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 
32

的要对此的一个好方法是不使用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?

[Matlab中的默认参数(的