任何和所有在空应该给出相同的答案。然而,他们在这里给出了一个不同的答案,所有的和空的是真的。任何人都可以解释matlabs的这种行为(在版本2010a-> 2012b上测试过)。Matlabs评估任何和所有与空向量给予不同的答案
>>任何([])
ANS =
0
但
>>所有([])
ANS =
1
任何和所有在空应该给出相同的答案。然而,他们在这里给出了一个不同的答案,所有的和空的是真的。任何人都可以解释matlabs的这种行为(在版本2010a-> 2012b上测试过)。Matlabs评估任何和所有与空向量给予不同的答案
>>任何([])
ANS =
0
但
>>所有([])
ANS =
1
any
和all
空阵列上绝对不应该给予同样的答案 - 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 X
是true
时X
所有元素都是如此。但是当X
是[]
时,if
的行为不同。这也记录在案。
啊我有点有点尤里卡时刻。直到被证明有罪之前,同一个校长也构成我们无罪的法律体系的一部分。因此,一切都是真的,直到它看到一个错误。任何事情都是错误的,直到它看到真实的。谢谢。 – Philliproso 2013-03-07 15:12:05
是的。请注意,当A为空时,“A中的所有x都是真的”,“A中的所有x都是假的”,“A中的所有x不等于x”以及“A中的所有x都是圣诞老人”都是真句子。 – 2013-03-07 15:34:45
这种行为被明确记载:
从http://www.mathworks.co.uk/help/matlab/ref/any.html:
如果
A
是空的,any(A)
返回逻辑0
(false
)。
从http://www.mathworks.co.uk/help/matlab/ref/all.html:
如果
A
是空的,all(A)
返回逻辑1
(true
)。
我想的all
的行为稍有常理。在猜测,我想说的意图是以下等价持有,对称性:
~all(A) == any(~A)
确定其记录,但@SamRoberts得到的底层逻辑 – Philliproso 2013-03-07 15:16:21
行为是由函数的定义,但即使我想知道,这样定义的目的是什么... – 2013-03-06 20:29:21