若一個函式本來應該輸入的參數是常數,例如 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它們就分別是 A 的第一列、第二列和第三列的最大值。 其實上面三句話可以合在一起寫:
8
9
(max(A'))'
同理,如果要將 A 的列向量分別排序,則可以說
(sort(A'))'
現在,如果將 A 視為一張表格,例如每一列是一個學生的成績, 每一行是某次考試的成績,則矩陣又可以視為一張數據表格。 那麼 Matlab 的描述統計函式,就可以用來處理這整張表格的統計計算。
習題
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]
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]
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]