Function 在MATLAB中使用varargin作为多个默认值的参数

Function 在MATLAB中使用varargin作为多个默认值的参数,function,matlab,Function,Matlab,有没有一种方法可以通过以下方式在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=

有没有一种方法可以通过以下方式在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取函数中的默认值。如何使用Varagin实现这一点?

这里有两种方法可以实现这一点,这两种方法自2007a(即,很长一段时间!)以来一直可用。有关更新得多的方法,请参阅

  • 使用
    nargin
    ,确保您的输入始终有序
  • 使用名称-值对和输入解析器

  • 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
    

    这将像
    myFunc('b',4)一样被使用。由于名称-值对,这种方法对输入顺序也是不可知的,因此您还可以执行类似于
    myFunc('c',3',a',1)的操作

    以下是编写函数的最新和最好的方法(使用R2019b)

    请注意,此语法不允许您直接在
    参数
    块中说
    options.C=options.A+options.B

    在MATLAB
    someFcn('A', 3)
    
    在MATLAB>=R2021a中,可以使用新的
    name=value
    语法

    someFcn(B = 7)
    

    争论按顺序进行。如果给出2个参数,则函数定义了参数1和2。选项是为未使用的参数传递空数组,检查传递了多少个参数,并对1或2个参数执行不同的操作,或者使用名称-值对。哇,我不知道这种方法-我的直觉反应是
    =
    语法非常可怕;函数调用中的赋值似乎与现有的MATLAB约定背道而驰!这里的
    选项
    输入是现在的关键字还是因为在
    参数
    块中使用而变得重要?旧式的
    'name',value
    配对与
    选项
    pre 21a完全不起作用,还是
    =
    语法只是首选?您可以根据自己的喜好互换使用
    name=value
    'name',value
    )名称
    选项
    没有什么神奇之处-只要在
    参数
    块中使用
    结构
    语法,就可以使用任何你喜欢的东西。(当然,您还可以通过类型验证等方式对此进行补充)。
    someFcn('A', 3)
    
    someFcn(B = 7)