Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 不带括号的函数sqrt()返回奇怪的值_Matlab_Octave - Fatal编程技术网

Matlab 不带括号的函数sqrt()返回奇怪的值

Matlab 不带括号的函数sqrt()返回奇怪的值,matlab,octave,Matlab,Octave,我只是不小心用八度输入了以下内容: sqrt 25 然后回来了: ans = 7.0711 7.2801 使用括号,sqrt(25)返回正确的结果。没有括号会发生什么?MATLAB是否具有相同的行为,或者只针对倍频程?我没有MATLAB,因此无法检查。倍频程将其解释为长度为2的字符数组,并将其转换为ASCII表示(50和53),然后获得平方根。这可以在MATLAB中通过使用: sqrt(double('25')) MATLAB产生一个错误,sqrt在没有括号的情况下没有为字符

我只是不小心用八度输入了以下内容:

sqrt 25
然后回来了:

ans =
    7.0711   7.2801

使用括号,
sqrt(25)
返回正确的结果。没有括号会发生什么?MATLAB是否具有相同的行为,或者只针对倍频程?我没有MATLAB,因此无法检查。

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

 sqrt(double('25'))

MATLAB产生一个错误,
sqrt
在没有括号的情况下没有为字符输入定义。

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

 sqrt(double('25'))

MATLAB产生了一个错误,即当在没有括号的情况下使用时,
sqrt
没有为字符输入定义。

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

load('foo.bar')
load foo.bar
这两种方法都是使用load的有效方法

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

sqrt 25
从理论上讲,将向量元素从char转换为double后,将尝试获取所传递字符串中向量元素的平方根。查看发生了什么的一种简单方法是将字符串“25”转换为其ascii等效项

+'25'
ans =
    50    53
当然,现在也不奇怪

sqrt([50 53])
ans =
       7.0711       7.2801

它在MATLAB中失败了,但在Octave中失败了,这仅仅说明TMW现在为sqrt的字符输入插入了一个错误检查(因此,这会导致一个错误,而不是对那些从未见过这种情况的人来说一个难以调试的问题。毕竟,一个字符的平方根没有任何意义。并且没有什么理由要计算一个字符的ascii等价物的平方根。因此,当您使用这是由于在matlab中调用函数的双重方式。例如,加载、保存等,所有这些工具都可以作为函数或命令调用。因此

load('foo.bar')
load foo.bar
这两种方法都是使用load的有效方法

当函数用作命令时,它假定输入是字符串

sqrt 25
从理论上讲,将向量元素从char转换为double后,将尝试获取所传递字符串中向量元素的平方根。查看结果的简单方法是将字符串“25”转换为其ascii等效值

+'25'
ans =
    50    53
当然,现在也不奇怪

sqrt([50 53])
ans =
       7.0711       7.2801

它在MATLAB中失败了,但在Octave中失败了,这仅仅说明TMW现在为sqrt的字符输入插入了一个错误检查(因此,这会导致一个错误,而不是对那些从未见过这种情况的人来说一个难以调试的问题。毕竟,一个字符的平方根没有任何意义。并且没有什么理由要计算一个字符的ascii等价物的平方根。因此,当您使用sqrt的命令形式。)

Wow,多么丑陋,但很有趣!Wow,多么丑陋,但很有趣!Yikes.Matlab(R2012b)返回:
未定义的函数“sqrt”,用于类型为“char”的输入参数。
用于
sqrt 25
。使用Octave 3.7.5(当前开发版本),我还得到一个错误
error:sqrt:expecting numeric argument
。Yikes.Matlab(R2012b)返回:
未定义的函数'sqrt',用于'char'类型的输入参数。
用于
sqrt 25
。使用Octave 3.7.5(当前开发版本),我还得到了一个错误
error:sqrt:期望数值参数
。知道ascii转换的
+
语法非常方便!@HughNolan-从MATLAB的黑暗时代起,+语法就一直存在,我从第2版左右就开始使用MATLAB了。像这样的语言中隐藏着一些奇怪的语法。我的猜测是,如果今天的MATLAB是从头开始设计的,他们不会允许这样的语法,但它仍然存在,从那时起为了兼容性而被推陈出新。ascii转换的
+
语法非常容易理解!@HughNolan-从MATLAB的黑暗时代起,+语法就一直存在,我从版本2 o开始使用MATLAB因此,在这种语言中隐藏着一些奇怪的语法。我的猜测是,如果MATLAB是今天从头开始设计的,他们不会允许这样的语法,但它仍然存在,从那时起就为兼容性而祖传下来。