Matlab 教材:複數、矩陣與轉置

若 A 是一個實係數矩陣,則 A' 就是它的轉置 (transpose)。 但是如果 A 裡面有複數元素,則 A' 就相當於 Hermitian: 轉置矩陣,並將每個元素取共軛複數 (所以實數部份沒有影響)。 這也包含向量或序列的狀況,例如 x 是一個三維向量 (直的), 則 x' 就是 x 的 Hermitian,成為一個三維序列 (橫的), 而且每個元素取其共軛複數。 如果 c 就是一個複數,那麼 c' 就是 c 的共軛複數。

譬如說 c=3,則 c' 就還是 3。 但是如果 c=complex(1,3),也就是 1+3i, 那 c' 就成了 1-3i。 因此,c*c' 不是 c2 的意思,而是 |c|2。 當然,如果 c 是個實數,那 c2 和 |c|2 是一樣的意思; 不過我們要留意,萬一 c 是複數,那就不同了。

令 x=[x1, x2, x3] 是一個序列, 則根據上述解釋,x*x' 就是

|x1|2 + |x2|2 + |x3|2
因此
sqrt(x * x')
都是 x 的歐幾里得長度 (Euclidean norm)。 其實它也可以用 norm(x) 取得。

如果只要做轉置而不要取共軛複數,可以說 A.' 或者 x.', 注意那個「點」,這是 Matlab 的「點指令」之一,以後還會再多介紹一些。 當然囉,如果 c 是個純量、不管是實數還是複數,那 c.' 就是 c 它自己, 這個指令用在純量上沒什麼意義。

如果您不喜歡、或是不方便用 ' 算子來做 Hermitian, 可以改用函式 ctranspose()。 例如 ctranspose(A) 的效果和 A' 是一樣的。 同樣地,如果您不喜歡、或是不方便用 .' 算子來做轉置, 可以改用函式 transpose()。 例如 transpose(A) 的效果和 A.' 是一樣的。 要注意,transpose() 就如其名: 它真的只有做轉置,沒有取共軛複數。

習題

  1. x=[1, sqrt(2), 3, exp(4), 5]y=[4, 3, 2, sqrt(2), exp(1)],計算 x 和 y 的內積。
  2. x=[1, -2, 3, complex(1,-1), 5]y=[4, complex(0,3), 2, complex(1,-1), 1],計算 x 和 y 的內積。
  3. x=[1, sqrt(-2), 3, complex(1,-1), -2] 計算 x 和它自己的內積。
  4. x=[1, sqrt(2), 3, exp(4), 5] 計算 x 和它自己的內積。
單維彰 (2003/03/11) --- 04/03/17 (單) [Prev] [Next] [Up]