MATLAB函数中的可选参数

Yek*_*ver 59 math parameters matlab arguments function

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

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

Mor*_*gan 47

一个简单的方法是通过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
Run Code Online (Sandbox Code Playgroud)


Pra*_*ian 45

有关如何执行此操作的一些不同选项.最基本的是使用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
Run Code Online (Sandbox Code Playgroud)

一个更优雅的解决方案是使用inputParser该类来定义您的函数所需的所有参数,包括必需和可选.inputParser还允许您对所有参数执行类型检查.


Evg*_*eev 40

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

例:

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

请参阅此答案,了解如何通过这种方式执行此操作:如何检查函数调用中是否提供了参数?


小智 7

Mathworks:函数参数验证

对于如何在函数中使用可选参数有详细的描述。此外,您还可以学习如何使用内置 matlab fun 等函数

乐趣(arg1,'键1',值1)

有一些使用上面技巧的例子:

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
Run Code Online (Sandbox Code Playgroud)