Matlab 教材:邏輯算子的拓展應用範例
拓展的邏輯算子有什麼用呢?只要發揮創意,就會發現妙用。
這裡我們舉一個例子。這是做老師的人經常 (也許每學期一次) 需要的程序。
假設以下序列是一個班級的學期成績:
v = [59 92 40 12 85 54 57 49 80 61 82 57]
現在老師想要調整分數,把 >= 55 且 <= 59 的成績,都加分到 60 分。
以下敘述一種做這個「調整分數」的 Matlab 流程。
首先,我們把成績介於 55 和 59 之間 (含兩端點) 的「位置」取出來:
pos = ((55 <= v) & (v <= 59))
得到的 pos 序列是
[1 0 0 0 0 0 1 0 0 0 0 1]
然後我們把不需要加分的成績保持原狀,但是暫時讓那些將被加分的成績是 0:
noadj = v .* (~pos)
得到的 noadj 序列是
[0 92 40 12 85 54 0 49 80 61 82 0]
現在,只要把那些被加分的成績變成 60 就好了:
new = noadj + 60*pos
得到的 new 序列是
[60 92 40 12 85 54 60 49 80 61 82 60]
這就是學期成績啦。
習題
- 令 v 是任意維度的序列,元素是任意的正整數。
寫一些 Matlab 指令,把 v 裡面超過 255 的元素全部置換成 255,其他的元素不變。
- 令 n 是任意正整數,x 是任意介於 0 與 1 之間的數,
v = rand(1,n); 寫一些 Matlab 指令,
使得 v 裡面不到 x 的元素全部被置換成 x,其他元素不變。
- 令 v 是任意維度的序列,
寫一些 Matlab 指令,計算 v 裡面所有介於 60 和 100 之間的元素和
(含兩端點)。
單維彰 (2003/04/15) --- (單)