2013-03-06 50 views
4

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

>>任何([])

ANS =

0 

>>所有([])

ANS =

1 
+1

行为是由函数的定义,但即使我想知道,这样定义的目的是什么... – 2013-03-06 20:29:21

回答

2

anyall空阵列上绝对不应该给予同样的答案 - MATLAB的行为既记载和正确的。

any(A)指“存在这是真的的A一个元件”由于在A没有元素,换句话说

∃x∈A x is true

,它正确返回false

all(A)手段“为A所有元素,该元素是真实的”,换句话说

∀x∈A x is true

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

如果你想在那里MATLAB的行为确实似乎错了,矛盾以上的情况下,尽量

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

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

+0

啊我有点有点尤里卡时刻。直到被证明有罪之前,同一个校长也构成我们无罪的法律体系的一部分。因此,一切都是真的,直到它看到一个错误。任何事情都是错误的,直到它看到真实的。谢谢。 – Philliproso 2013-03-07 15:12:05

+0

是的。请注意,当A为空时,“A中的所有x都是真的”,“A中的所有x都是假的”,“A中的所有x不等于x”以及“A中的所有x都是圣诞老人”都是真句子。 – 2013-03-07 15:34:45