使用空向量的Matlabs评估任何和所有给出不同的答案

时间:2013-03-06 20:24:13

标签: matlab

空的任何一切都应该给出相同的答案。然而,在这里,他们给出了一个不同的答案,所有和空的都是真的。任何人都可以解释matlabs的这种行为(在版本2010-> 2012b上测试)。

  

>>任何([])

     

ans =

 0

但是

  

>>所有([])

     

ans =

 1

2 个答案:

答案 0 :(得分:5)

此行为已明确记录:

我认为all的行为有点违反直觉。在猜测中,我会说对于对称性,意图是保持以下等价:

~all(A) == any(~A)

答案 1 :(得分:2)

空数组上的

anyall绝对不能给出相同的答案 - MATLAB的行为既有记录也有正确。

any(A)表示“存在A的元素是真的”,换句话说

∃x∈A x is true

由于A中没有元素,因此它会正确返回false

all(A)表示“对于A中的所有元素,该元素为真”,换句话说

∀x∈A x is true

也许这不太直观,但由于A中没有元素,该句子为真 - 并且MATLAB正确返回true。任何关于一阶逻辑的教科书都会证实这一点。

如果您想要一个MATLAB行为确实出现错误并与上述内容相矛盾的情况,请尝试

>> if [] disp('hello'); else disp('bye'); end
bye

在所有其他情况下,当if X的所有元素都为真时,trueX。但是当X[]时,if的行为会有所不同。这也是记录在案的。