我偶然在Octave中输入了以下内容:
sqrt 25
然后回来了:
ans =
7.0711 7.2801
使用括号,sqrt(25)
将返回正确的结果。没有括号的情况会发生什么? MATLAB是否共享相同的行为或仅特定于Octave?我没有MATLAB所以我无法检查。
答案 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时会发生什么命令表格。)