2016-11-26 22 views
1

的問題的答案在這裏Why is complex conjugate transpose the default in MatlabMatlab的:()^ *對複數

問T速度表示,對複數的,我們可以用'符號來表示,用於實數的轉置操作。在數學上,對於實數值完成的轉置操作由符號(.)^T表示。對於複數的轉置,等效符號是(.)^H。它的做法是 - 首先我們取複數的共軛,然後進行轉置。這是操作(.)^H

我想爲複數執行操作(.)^{*T} = (.)^H。我爲此使用了符號撇號。請糾正我錯在哪裏。

我想確認一下這個概念的實現是否正確或者不使用Matlab。例如,對於實值向量A_r,我想它的轉multiply_r = A_r*A_r'

複製數值矢量A_c複雜的同乘它,這種操作將成爲multiply_c = A_c * A_c'

A_r =[1,2,3]; %real valued vector 
B_r = A_r'; %transpose of real valued vector 
multiply_r =A_r*B_r; 

A_c = [1 + sqrt(-1)*1, 2+sqrt(-1)*2, 3+sqrt(-1)*3]; %complex valued vector 
B_c = A_c'; %transpose of complex valued vector 
multiply_c = A_c*B_c; 

這樣行嗎?

更新:我試圖採取這個複數值數組的正常轉置,以便它被安排在3行1列1行和3列intead。使用運算符.'我越來越奇怪的值,因爲該數組現在增加的大小!什麼是正確的方法?

h = [ -5.1053 + 3.6797i 1.3327 + 5.7339i 4.1302 -10.7521i].' 

h = 

    -5.1053 + 3.6797i 
    1.3327 + 5.7339i 
    4.1302   
     0 -10.7521i 
+1

看起來不錯。但這取決於你想要做什麼。如果想要轉置複數(無共軛),請使用'。'。如果你想共軛轉置使用'''' –

+0

@Luis Mendo:我想做相當於$(。)^ {* T} =(。)^ H $的操作。那我應該用什麼?這是共軛轉置? – SKM

+0

順便說一句,你不需要寫'sqrt(-1)'你有'i'和'j'符號在Matlab中。 – Shai

回答

2

如你所指出的,Matlab具有兩個矩陣 「轉置」((.)^T)和定義的 「共軛轉置」((.)^H)。
對於實值轉,你有transpose,可以表示爲操作員.'(注意前'「」):

aT = transpose(a); 
isequal(aT, a.'); % transpose() and .' are the same 

對於複雜的共軛轉你有ctranspose,可以表示作爲一個經營者'(注意有'之前沒有.):

aH = ctranspose(a); 
isequal(aH, a'); % ctranspose and ' are the same 

可以驗證使用conj

isequal(a', conj(a).'); 
+0

您能否在我的問題中看到更新?當遇到特定情況的操作員時,我有一個奇怪的情況 – SKM

+0

@SKM使用逗號分隔值 – Shai

+0

這些值是由程序在運行時使用等式生成的,我不能放逗號。一旦方程計算出這些值,有沒有辦法可以放一個逗號? – SKM