当函数调用缺少某些参数时,如何报告自定义错误?

时间:2014-10-12 10:06:20

标签: matlab error-reporting variadic-functions

我正在自学MATLAB的基础知识,而且我一直坚持如何为函数创建错误。 这是我的尝试:

function kinetic = KE(m,v)

KE = 0.5*m*v*v

%error messages 
if (isempty(m))
  % mass is empty
  error('No mass given (argument 1)');
elseif (isempty(v))  
  % velocity is empty
  error('No velocity given (argument 2)');
end

fprintf('The kinetic energy is %d joules\n', KE);

因此,如果用户未指定2个变量,则该函数会向用户发出错误,告知用户他们未指定哪个变量。当我尝试收到此错误消息时,MATLAB返回一般错误消息:

 kinetic(,3)
   kinetic(,3)
     |
 Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.

我不知道如何解决这个问题。我尝试用isemptyarg1替换arg2的参数,但没有区别。然后我尝试在http://www.mathworks.co.uk/help/matlab/ref/error.html复制示例代码,但它仍然无效。

如何为多个变量的函数生成特定错误?

我知道这是一个非常基本的问题,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  1. 函数签名的语法是

    enter image description here

    (如果函数只有一个输出,则方括号是可选的。)这里,kinetic是函数的输出,而KE是函数的名称;因此,对您的函数的调用具有

    形式
    KE(m,v)
    

    kinetic(m,v)
    
  2. isempty函数仅用于检测数组(在MATLAB中,默认情况下一切都是2D数组)是否为空。您无法使用它来检测函数调用是否缺少参数。

  3. 正如Oliver所指出的那样,KE(,v)不是正确的MATLAB语法,并且MATLAB将在其尝试处理函数调用之前停止其轨道并让用户知道她的错误。

  4. 这里你可能想要做的是定义一个可变参数函数,即一个可以接受不同数量参数的函数。为此使用vararginnargin;有关更多详细信息,请参阅MATLAB帮助。

    最后,你可能想要

    • 通过使用逐项运算符(.*.^)来向量化您的函数,即使其与向量输入兼容,
    • 通过使用分号终止所有赋值语句来阻止在命令窗口中打印结果。

    function kinetic = KE(varargin)
    
    if nargin == 0
        error('No mass or velocity given')
    elseif nargin == 1
        error('No velocity given (argument 2)')
    elseif nargin == 2
        m=varargin{1};
        v=varargin{2};
    else
        error('Too many inputs')
    end
    
    KE = 0.5*m.*v.^2;
    fprintf('The kinetic energy is %d joules\n', KE)