2016-09-14 84 views
1

我的印象是||是MATLAB中的「或」語句。也許有人可以解釋我所看到的令人困惑的行爲:有條件的「或」語句在MATLAB中

a = 2; 

a == 2  %returns ans = 1 (true) 

a == 2 || 3 %returns ans = 1 (true) 

a == 3 || 4 %returns ans = 1 (true)??!! 

我在這裏錯過了什麼? 'a'既不是3也不是4,所以不應該是

a == 3 || 4 

return ans = 0(false)?

回答

6

表達

a == 3 || 4 

則評價道:

a == 3  => false 
then 
false || 4 => true 
如果你想檢查是否等於3或4

你應該寫

(a == 3) || (a == 4) 

這是這樣評價

a == 3   => false 
then 
a == 4   => false 
then 
false || false => false 
0

托馬斯的回答是對這裏發生了什麼的一個很好的解釋;另一種可以將變量與多個答案進行比較的方法是使用any()函數。

solutions = [3 4]; 
any(a==solutions); 

a==solutions行創建的矩陣相同大小的解決方案,其中包含在其中indecies其中所述條件爲真1的和0的地方它是假的。

幾個例子:

any(isprime([17:24])); %returns true; 17, 19 and 23 are prime 
any(isinteger(sqrt([17:24]))); %(test for square number) returns false; no square numbers in this range 
any(mod(magic(3)(:),6)==3); %returns true; 9 mod 6 == 3. Note (:) inserted so that any is evaluated against all entries of the square matrix created by magic 
0

a == 3 || 4 %returns ans = 1 (true) ?? !!

上述行爲的原因是由於MATLAB中除'0'以外的任何實數始終評估爲true。

所以這裏發生了什麼是

  • 表達a == 3首先是評估,發現false
  • 接下來,評估表達false || 4
  • 由於'4'是一個非零的實數,因此得到的表達式爲false || true,其計算結果爲true

爲了得到想要的結果,使用(a == 3) || (a == 4),其評價爲false || false,其返回false