我只是不小心在 Octave 中输入了以下内容:
sqrt 25
回来了:
ans =
7.0711 7.2801
带括号,sqrt(25)
返回正确的结果。没有括号会发生什么?MATLAB 是否具有相同的行为或仅特定于 Octave?我没有 MATLAB,所以我无法检查。
Octave 将其解释为长度为 2 的字符数组,并将它们转换为它们的 ASCII 表示(50 和 53),然后得到平方根。这可以在 MATLAB 中使用:
sqrt(double('25'))
MATLAB 在不带括号使用时会产生一个sqrt
未为 char 输入定义的错误。
这是由于在 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 时,逻辑上会发生错误.)