如何在MATLAB中声明具有可选参数的函数?
例如:function [a] = train(x, y, opt)
,其中opt必须是一个可选参数。
如何在MATLAB中声明具有可选参数的函数?
例如:function [a] = train(x, y, opt)
,其中opt必须是一个可选参数。
有几种不同的方法可以实现这一点。 最基本的是使用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
还允许您对所有参数执行类型检查。
通过使用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
一个好的做法是不使用nargin
,而是使用exist('opt', 'var')
来检查变量是否已经被设置。
例如:
function [a] = train(x, y, opt)
if (~exist('opt', 'var'))
opt = true;
end
end
看这个答案,了解采用这种方式的优点:如何检查函数调用中是否提供了参数?
本文详细介绍如何在函数中使用可选参数,同时你可以了解如何使用内置的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