正确使用tilde运算符作为输入参数

DMu*_*ler 9 matlab function tilde

功能:

我的MATLAB函数有一个输出和几个输入参数,其中大部分都是可选的,即:

output=MyFunction(arg1,arg2,opt1,opt2,...,optN)
Run Code Online (Sandbox Code Playgroud)

我想做的事:

我只想给函数提供arg1,arg2和最后一个可选的输入参数optN.我使用了波浪符运算符,如下所示:

output=MyFunction(str1,str2,~,~,...,true)
Run Code Online (Sandbox Code Playgroud)

不理想的结果:

这给出了以下错误消息:

Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.
Run Code Online (Sandbox Code Playgroud)

第一个代字号后面的错误指向逗号,但实际上我不知道该怎么做.

问题识别:

  • 我使用MATLAB 2013b,它支持代字号运算符.
  • 根据MATLAB的文档,上面的函数调用应该工作:

    您可以在参数列表中的任何位置忽略任意数量的函数输入.用逗号分隔连续的波浪号...

  • 我想有一些解决方法,例如使用''或[]作为输入,但我真的想了解如何正确使用'〜',因为实际上离开输入允许我在检查输入时使用exists()函数的参数.

如果您需要我的任何进一步信息,请告诉我.

非常感谢你!

gir*_*ire 9

代字号仅用于函数声明.Matlab的mlint建议用替换未使用的参数~.结果是一个像这样声明的函数function output = MyFunction(a, b, ~, c).这是一个非常糟糕的做法.

由于您具有参数是可选的函数,因此必须使用空参数调用该函数output=MyFunction(str1,str2,[],[],...,true).

更好的方法是使用varargin参数声明函数并为不同的输入准备函数:

function output = MyFunction(varargin)

if nargin == 1
    % Do something for 1 input
elseif nargin == 2
    % Do something for 3 inputs
elseif nargin == 3
    % Do something for 3 inputs
else
    error('incorrect number of input arguments')
end
Run Code Online (Sandbox Code Playgroud)

甚至可以按如下方式声明您的函数:

function output = MyFunction(arg1, arg2, varargin)
Run Code Online (Sandbox Code Playgroud)

上面的声明将告诉Matlab您期望至少有两个参数.

请参阅nargin 此处的文档.

......以及这里的文件varargin