1

我只是不小心在 Octave 中输入了以下内容:

sqrt 25

回来了:

ans =
    7.0711   7.2801

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

4

2 回答 2

7

Octave 将其解释为长度为 2 的字符数组,并将它们转换为它们的 ASCII 表示(50 和 53),然后得到平方根。这可以在 MATLAB 中使用:

 sqrt(double('25'))

MATLAB 在不带括号使用时会产生一个sqrt未为 char 输入定义的错误。

于 2013-07-17T14:48:45.307 回答
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 时,逻辑上会发生错误.)

于 2013-07-17T15:31:20.117 回答