首页 > 解决方案 > 在 MATLAB 中对具有默认值的多个参数使用 varargin

问题描述

有没有办法通过以下方式在 MATLAB 中使用 varargin 提供参数?

功能

func myFunc(varargin)
  if a not given as argument
    a = 2;
  if b not given as argument
    b = 2;
  if c not given as argument
    c = a+b;
  d = 2*c;
end

我想用 b = 3 调用上述函数一次,而前一个函数在同一个命令窗口中以 a = 3 和 c = 3 运行,这次让 b 取函数中的默认值。如何使用 varargin 来完成?

标签: functionmatlab

解决方案


这里有两种自 2007a 以来就可以使用的方法(即很长一段时间!)。有关更新的方法,请参阅Edric 的回答

  1. 使用nargin并确保您的输入始终井井有条
  2. 使用名称-值对和输入解析器

nargin:稍微简单但依赖于一致的输入顺序

function myFunc( a, b, c )
    if nargin < 1 || isempty(a)
        a = 2;
    end
    if nargin < 2 || isempty(b)
        b = 2;
    end
    if nargin < 3 || isempty(c)
        c = a + b;
    end
end

使用isempty检查,您可以选择仅提供稍后的参数,例如myFunc( [], 4 ),仅设置b=4并使用默认值。


inputParser: 更灵活但不能直接处理c=a+b默认值

function myFunc( varargin )
    p = inputParser;
    p.addOptional( 'a', 2 );
    p.addOptional( 'b', 2 );
    p.addOptional( 'c', NaN ); % Can't default to a+b, default to NaN
    p.parse( varargin{:} );

    a = p.Results.a;
    b = p.Results.b;
    c = p.Results.c;
    if isnan(c) % Handle the defaulted case
        c = a + b;
    end
end

这会像myFunc( 'b', 4 );. 由于名称-值对,这种方法也与输入顺序无关,因此您也可以执行类似的操作myFunc( 'c', 3, 'a', 1 );


推荐阅读