我写了一个简单的程序来学习Matlab中的子函数。在这个过程中我遇到了一个我希望得到帮助的错误。这是函数
function result = hyperbolic(string,x)
%HYPERBOLIC calculates the sinh, cosh and tanh of a given value
msg = nargchk(2,2,nargin);
error(msg);
if string == 'sinh' | string == 'cosh' | string == 'tanh'
if string == 'sinh'
result = sinh(x);
elseif string == 'tanh'
result = tanh(x);
elseif string == 'cosh'
result = cosh(x);
end
else
error('Invalid String');
end
end
function sinh_output = sinh(x)
sinh_output = 1;
end
function cosh_output = cosh(x)
cosh_output = 2;
end
function tanh_output = tanh(x)
tanh_output = 3;
end
问题:
当函数检查输入的字符串是否等于sinh,tanh或cosh时,如果输入的字符串的长度等于sinh的长度,则它仅在else分支中输出我的错误消息,cosh或tanh等于4.否则,如果输入的字符串长度不等于4,则打印
Error using ==
Matrix dimensions must agree.
Error in hyperbolic (line 10)
if string == 'sinh' | string == 'cosh' | string == 'tanh'
我的问题:
为什么当两个字符串的长度不相等时,它不会打印我的错误消息?
P.S。忽略结果的实际值,我只是在测试一些东西
答案 0 :(得分:2)
要比较字符串,请使用strcmp
。例如:
if strcmp(string,'sinh')
将==
与字符串一起使用的问题是Matlab将其解释为字符向量之间的相等性测试(字符串是字符向量);并且仅在向量具有相等长度时才定义相等关系。如果它们有不同的长度,Matlab会发出错误;丹尼斯在评论中指出,除非他们中的一个是单一角色。在后一种情况下,Matlab会将单个字符与另一个字符串的每个字符进行比较。
strcmp
接受相同或不同长度的字符串(当然,如果长度不同,则返回false
,因为在这种情况下,字符串是不同的)。所以这是测试字符串是否相等的方法。
答案 1 :(得分:2)
根据matlab documentation,您需要使用strcmp
来比较字符串的相等性,因为它可以比较不同长度的字符串。
引用(强调是我的):
关系运算符是<,>,< =,> =,==和〜=。关系运算符执行两个数组之间的逐元素比较。它们返回一个大小相同的逻辑数组,元素设置为逻辑1(true),其中关系为true,元素设置为逻辑0(false),而不是。
运算符<,>,< =和> =仅使用其操作数的实部进行比较。运算符==和〜=测试实部和虚部。
要测试两个字符串是否相等,请使用strcmp,它允许比较不同长度的矢量。
此外,您的代码可以缩短(您不需要比较字符串两次):
if strcmp(string, 'sinh')
result = sinh(x);
elseif strcmp(string, 'tanh')
result = tanh(x);
elseif strcmp(string, 'cosh')
result = cosh(x);
else
error('Invalid String');
end
或根据评论,您可以使用switch
声明:
switch string
case 'sinh'
result = sinh(x);
case 'tanh'
result = tanh(x);
case 'cosh'
result = cosh(x);
otherwise
error('Invalid String');
end