四則運算 (加減乘除) 這種最基本的計算有對應符號,亦即 + - * /, 這種符號學名是「算子」operator (子要唸三聲)。 Matlab 還有次方、轉置 (同時也是共軛) 算子,分別是 ^ 和 ' 。 這裡我們再添一批:邏輯算子。 就是「問」某種數值的關係「是否」成立的意思。
譬如我們要問 23 是否等於 2*2*2?
2^3 == 2*2*2其中 == 就是一種邏輯算子,它是問「是否相等」的意思。 計算的結果,如果「是」,答案是 1;如果「否」,答案是 0。 同理,也可以問 23 與 2*2*2 「是否不相等」:
2^3 ~= 2*2*2
有沒有人知道 比較大還是 比較大?問 Matlab:
exp(pi) > pi^exp(1)(注意這個指令的寫法) 答案是 1,也就是 比較大。 很直覺地,> 就是問「是否大於」的算子。 不大於就是小於或等於嘛,因此相反地問題就是
exp(pi) <= pi^exp(1)這裡 <= 就是問「是否小於或等於」的算子。
類似地,< 就是問「是否小於」, 而 >= 就是問「是否大於或等於」。
此外還有標準的 AND 和 OR 邏輯算子。 AND 是 & 而 OR 是 |。 例如,如果您喜歡「窗前有兩棵樹,一棵是柳樹,另一棵也是柳樹」這種修辭, 那麼您可能也會喜歡用
(exp(pi) < pi^exp(1)) | (exp(pi) == pi^exp(1))來代替 exp(pi) <= pi^exp(1)。
數學中常寫的 意思就是 ,用 Matlab 語法不能寫成 a <= x <= b,而要寫成
(a <= x) & (x <= b)同理,如果要詢問是否 就要問
(x < a) | (x > b)
獨立的 ~ 就是「非」的意思,如果一定要問「是否不大於」, 可以這樣說:
~(exp(pi) > pi^exp(1))Matlab 先執行括號裡面的 exp(pi) > pi^exp(1) 得出來的結果再被 ~ 「逆轉」,也就是 1 變成 0、0 變成 1。
同理,如果要詢問是否 也可以這麼問:
~( (a <= x) & (x <= b) )
因為浮點數的數值計算,有 不可避免的誤差, 因此要比較兩個浮點數是否相等,是很危險的動作。 譬如我們知道 sin(pi) 應該是 0,但是如果問
sin(pi) == 0卻得到否定答案。原來 Matlab 計算的 sin(pi) 是
因為計算上不可避免的誤差,我們經常將差異極微的兩個浮點數視為相等。 至於要多「微小」的差異才可以忽略呢? 那是「數值分析」這門數學課題的主題之一了,我們不在此深入。 原則上,當我們要問兩個浮點數是否相等的時候, 都是改問「它們的差的絕對值是否夠小」?例如
abs(sin(pi)) <= 1e-151e-15 就是 10^(-15) 的意思,也就是 10-15。
最後提醒您,在 Matlab 裡面,= 是 指派, == 是 是否相等。別搞混了。
習題