没有括号的函数sqrt()返回奇怪的值

时间:2013-07-17 14:42:38

标签: matlab octave

我偶然在Octave中输入了以下内容:

sqrt 25

然后回来了:

ans =
    7.0711   7.2801

使用括号,sqrt(25)将返回正确的结果。没有括号的情况会发生什么? MATLAB是否共享相同的行为或仅特定于Octave?我没有MATLAB所以我无法检查。

2 个答案:

答案 0 :(得分:7)

Octave将其解释为length-2 char数组,并将它们转换为ASCII表示(50和53),然后获得平方根。这可以在MATLAB中使用:

完成
 sqrt(double('25'))

MATLAB产生的错误是在没有括号的情况下使用时没有为char输入定义sqrt

答案 1 :(得分:5)

这是由于在matlab中可以调用函数的双重方式。例如,加载,保存等,所有这些工具都可以作为函数或命令调用。因此,

load('foo.bar')
load foo.bar

两者都是使用负载的有效方法。

当一个函数用作命令时,它假定输入是一个字符串。所以

sqrt 25

理论上会尝试在传递的字符串中取向量元素的平方根,然后将它们转换为从char中加倍。看看会发生什么的简单方法是转换字符串' 25'它的ascii等价物。

+'25'
ans =
    50    53

当然现在应该毫不奇怪

sqrt([50 53])
ans =
       7.0711       7.2801

它在MATLAB中失败但不是Octave只是说TMW现在已经插入了对sqrt的字符输入的错误检查(因此这确实会导致错误,而不是那些从未见过的难以调试的问题毕竟,角色的平方根没有任何意义。并且没有理由想要计算字符的ascii等价的平方根。所以逻辑上错误是在使用sqrt时会发生什么命令表格。)