Matlab 教材:關於向量的基本函式

其實向量 (vector) 是一種特殊的矩陣:亦即 n 乘 1 的矩陣。 向量都是「直」的,又特別稱為行向量 (column vector)。 轉置的向量,也就是「橫」的,稱為序列 (array) 或列向量 (row vector), 它們是 1 乘 n 的矩陣。 以後除非特別需要,我們說向量的時候也都包含序列。

例如令

v = [-2 -1 0 1 2]'
則 v 是一個五維向量。 用在矩陣上的函式,通常也都可以用在向量上,例如
size(v)
得到 5   1。而 rank(v) 也得到正確的答案: 1; 凡是非零的向量本身都是線性無關,所以階數是 1。

但是 det(v) 不能做,因為 v 不是方陣。 奇怪的是 trace(v) 也不能做,先不要管它吧。

Matlab 還是有針對向量的專門函式,這一節介紹關於線性代數的幾個函式, 下一節介紹關於描述統計的幾個函式。

首先,向量的歐幾里得長度 (Euclidean norm) 是其元素的絕對值平方和開根號:

norm(v)
得到答案 3.1623,也就是
sqrt( abs(v(1))^2 + abs(v(2))^2 + abs(v(3))^2 + abs(v(4))^2 + abs(v(5))^2 )
在上述例子,也就是 sqrt(10) 的意思。 讀者或許認為,既然已經平方,幹麼還要先做絕對值? 那是為了顧慮 v 的元素可能有複數。 如果 c 是個複數,那麼 c^2 和 abs(c)^2 就不一樣了。

如果已經知道 v 是一個向量,那麼可以用

length(v)
來計算它的維度。 非常注意:length 是指向量的維度,不是長度; 長度要用 norm(v) 來計算。

事實上,length( ) 是取得 size( ) 回應的兩個維度當中比較大的那一個數。 所以如果 A 是一個 3 乘 4 的矩陣,則 length(A) 將會是 4。

最後,我們學習一個做內積 (inner product, 又稱為 dot product) 的指令

dot(v,v)
不管 v 和 w 是直還是橫,只要它們是維度相等的兩個向量, dot(v,w) 就能做計算。而如果 v 和 w 都是行向量,則
dot(v,w) = v' * w
因此
sqrt(dot(v,v)) = norm(v)

習題

  1. 不管 A 是矩陣還是向量,請問 length(A) 和 length(A') 是否相等? 為什麼?
  2. 輸入一些複數值的向量 v,實驗看看 dot(v,v) 有沒有可能出現負數? 為什麼?
單維彰 (2003/04/09) --- 03/04/10 (單) [Prev] [Next] [Up]