Matlab 教材:Matlab 函式的拓展設計

若一個函式本來應該輸入的參數是常數,例如 sin( ), 則它也可以輸入向量或矩陣。Matlab 的「常數函式」通常的設計是: 當輸入的變數內容是向量或矩陣的時候,就把函式作用在每一個元素上。例如

x = linspace(0,2*pi,5)
產生 x = [0, pi/2, pi, 3*pi/2, 2*pi] 這個序列,而
sin(x)
一次做了五個 sine 函數值,也就是 [sin(0), sin(pi/2), sin(pi), sin(3*pi/2), sin(2*pi)]

同理,令

A = [1 2 3 4; 5 6 7 8; 9 8 7 6]
sqrt(A)
一次就做了 A 裡面 12 個元素的平方根。

若一個函式本來應該輸入的參數是向量,例如 max( ), 則它也可以輸入矩陣。其意義就是把函式分別作用在矩陣的每一個行向量 (直的) 上。 例如 A 如上述,則

max(A)
輸出 9   8   7   8 分別是第一行、第二行、 第三行和第四行的最大值。 您還可以試試看
sort(A)
輸出是
     1     2     3     4
     5     6     7     6
     9     8     7     8
依序是第一行、第二行、第三行和第四行排序 (從小到大) 的結果。

「向量函式」作用在矩陣上,一律分別作用在矩陣的行向量上, 這是 Matlab 的「行導向」column oriented 原則。 如果想要讓它作用在列上,可以利用轉置矩陣。轉置之後, 列就成了行。為了答案看起來「自然」,最好在計算之後再轉置回來。

例如要求 A 的每一列的最大值,可以說

B = A';
m = max(B);
m'
得到一個向量
4
8
9
它們就分別是 A 的第一列、第二列和第三列的最大值。 其實上面三句話可以合在一起寫:
(max(A'))'

同理,如果要將 A 的列向量分別排序,則可以說

(sort(A'))'

現在,如果將 A 視為一張表格,例如每一列是一個學生的成績, 每一行是某次考試的成績,則矩陣又可以視為一張數據表格。 那麼 Matlab 的描述統計函式,就可以用來處理這整張表格的統計計算。

習題

  1. A = [2 8 4 2; 0 5 8 7; 7 2 5 3;
    4 7 7 5; 9 8 4 2; 5 0 3 7; 4 7 2 4]
    代表某七個學生的四次小考成績。 第一列代表第一個學生的成績、第一行代表第一次小考的成績,依此類推。 請計算每次小考的平均值、中位數與標準差。
  2. A = [2 8 4 2; 0 5 8 7; 7 2 5 3;
    4 7 7 5; 9 8 4 2; 5 0 3 7; 4 7 2 4]
    代表某七個學生的四次小考成績。 第一列代表第一個學生的成績、第一行代表第一次小考的成績,依此類推。 請計算每個學生的平均成績。
  3. A = [2 8 4 2; 0 5 8 7; 7 2 5 3;
    4 7 7 5; 9 8 4 2; 5 0 3 7; 4 7 2 4]
    代表某七個學生的四次小考成績。 第一列代表第一個學生的成績、第一行代表第一次小考的成績,依此類推。 請計算第一次小考和第四次小考的成績之相關係數。
單維彰 (03/04/10) --- [Prev] [Next] [Up]