MATLAB函数中的可选参数

74

如何在MATLAB中声明具有可选参数的函数?

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


1
可能是Matlab中的默认参数的重复问题,Python中“None”的Matlab等效方法,以及如何处理MATLAB函数参数的名称/值对的问题[(https://dev59.com/5nE85IYBdhLWcg3wbTD2)] - Amro
1
这里有关于该主题的很好的讨论:http://blogs.mathworks.com/pick/2010/04/02/setting-default-values/ 以及 http://blogs.mathworks.com/loren/2009/05/05/nice-way-to-set-function-defaults/。 - Richie Cotton
4个回答

60

有几种不同的方法可以实现这一点。 最基本的是使用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还允许您对所有参数执行类型检查。


57

通过使用nargin(N个参数)可以简单地实现这一点。不足之处是您必须确保参数列表和 nargin 检查匹配。

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

47

一个好的做法是不使用nargin,而是使用exist('opt', 'var')来检查变量是否已经被设置。

例如:

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

看这个答案,了解采用这种方式的优点:如何检查函数调用中是否提供了参数?


7

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

这肯定是最好的方式。 - ACarter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接