MATLAB 函数中的可选参数

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

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

130660 次浏览

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

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

值得记住的是,所有输入都是可选的,但是如果函数调用未设置的变量,那么函数将退出并出现错误。下面的示例设置 bc的默认值。如果 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

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

例如:

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

看看这个答案的优点这样做: 如何检查函数调用中是否提供了参数?

Mathworks: 函数参数验证

有一个关于如何使用函数中的可选参数的详细描述。此外,您可以学习如何使用函数,如内置的 matlab 乐趣,如

Fun (arg1,‘ key1’,value1)

这里有一些使用上述技巧的例子:

function [a] = train(x,y,opt)
arguments
x double
y double
opt {mustBeNonempty} = true
% this set the default value for opt is true
end
    

if opt
a = 1;
else
a = x+y;
end
end