我只是偶然在Octave中键入以下内容:
sqrt 25
Run Code Online (Sandbox Code Playgroud)
并回来了:
ans =
7.0711 7.2801
Run Code Online (Sandbox Code Playgroud)
使用括号,sqrt(25)返回正确的结果.没有括号的情况会发生什么?MATLAB是否共享相同的行为或仅特定于Octave?我没有MATLAB所以我无法检查.
Octave将其解释为length-2 char数组,并将它们转换为ASCII表示(50和53),然后获得平方根.这可以在MATLAB中使用:
sqrt(double('25'))
Run Code Online (Sandbox Code Playgroud)
sqrt在没有括号的情况下使用时,MATLAB会产生一个未为char输入定义的错误.
小智 5
这是因为可以在matlab中调用函数的双重方式.例如,加载,保存等,所有这些工具都可以作为函数或命令调用.从而,
load('foo.bar')
load foo.bar
Run Code Online (Sandbox Code Playgroud)
两者都是使用负载的有效方法.
当函数用作命令时,它假定输入是字符串.所以
sqrt 25
Run Code Online (Sandbox Code Playgroud)
理论上会尝试在传递的字符串中取向量元素的平方根,然后将它们转换为从char中加倍.查看发生了什么的简单方法是将字符串'25'转换为其ascii等效项.
+'25'
ans =
50 53
Run Code Online (Sandbox Code Playgroud)
当然,现在应该不足为奇了
sqrt([50 53])
ans =
7.0711 7.2801
Run Code Online (Sandbox Code Playgroud)
它在MATLAB中失败而不是Octave只是说TMW现在已经插入了对sqrt的字符输入的错误检查(因此这确实会导致错误,而不是那些从未见过这种情况的难以调试的问题.毕竟,角色的平方根没有任何意义.并且没有理由想要计算字符的ascii等价的平方根.所以在逻辑上错误是在命令形式中使用sqrt时会发生什么.)