2011-03-17 43 views
1

添加到while循環我有一個while循環看起來像這樣:無法條件在Matlab

while ((min_t_border>0) && (colided_border_num > 0) && (~(min_t>0))) 
    ... 
end 

我要添加到它的另一個條件:(exit_border_point ~= false)(exit_border_point) 當我把的醚上述條件適用於if聲明。但是,當我試圖把它作爲附加條件添加到時,甚至當我嘗試另一個條件添加到,例如如果我已經試過if ((exit_border_point ~= false) && (true))它告訴我:

「操作數的||&&運營商必須轉換爲邏輯標量值。「

我在做什麼錯?

* exit_border_point得到醚(3x1)載體或false

回答

2

由於exit_border_point可以是一個載體,嘗試使用anyall功能,像這樣:

if (~any(exit_border_point)) 

正如你可能已經猜到,any返回true如果陣列中的任何計算結果爲trueall如果數組中的所有內容都是true,則返回true。它們類似於||&&的矢量等效物。

1

爲條件纔有意義在ifwhile聲明的情況下,就應該評估爲標。

因此,你應該寫

all(exit_border_point)

(這相當於all(exit_border_point == true)),如果你想true如果一切都是真實的。如果您想在任何exit_border_point爲真時立即退出while循環,請將all替換爲any

請注意,&&||只適用於標量。他們是快捷操作員,因爲如果第一個語句確定結果,則不會評估第二個語句(例如,在&&的情況下,評估爲false。如果要按元素比較數組,請使用&|

1

如果exit_border_point是3x1向量,則(exit_border_point ~= false)也返回3x1向量,因此是錯誤。改用此條件:

~isequal(exit_border_point, false)