我正在自学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 [.
我不知道如何解决这个问题。我尝试用isempty
或arg1
替换arg2
的参数,但没有区别。然后我尝试在http://www.mathworks.co.uk/help/matlab/ref/error.html复制示例代码,但它仍然无效。
如何为多个变量的函数生成特定错误?
我知道这是一个非常基本的问题,我们将不胜感激。
答案 0 :(得分:1)
您的代码存在一些问题:
函数签名的语法是
(如果函数只有一个输出,则方括号是可选的。)这里,kinetic
是函数的输出,而KE
是函数的名称;因此,对您的函数的调用具有
KE(m,v)
不
kinetic(m,v)
isempty
函数仅用于检测数组(在MATLAB中,默认情况下一切都是2D数组)是否为空。您无法使用它来检测函数调用是否缺少参数。
正如Oliver所指出的那样,KE(,v)
不是正确的MATLAB语法,并且MATLAB将在其尝试处理函数调用之前停止其轨道并让用户知道她的错误。
这里你可能想要做的是定义一个可变参数函数,即一个可以接受不同数量参数的函数。为此使用varargin
和nargin
;有关更多详细信息,请参阅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)