如何將矩陣與其轉置相乘?

如何將矩陣與其轉置相乘?

我想將矩陣與其轉置相乘,以便知道它是否驗證 Q t Q=I。

然而,當我在 matlab 上計算它時,我使用一個我不知道的概念得到了一些奇怪的東西:conj(x)

  • 那麼,如何將矩陣與其轉置相乘呢?

這是我嘗試過的程式碼:

>> syms x
>> A=[cos(x) -sin(x);
sin(x) cos(x)]

A =

[ cos(x), -sin(x)]
[ sin(x),  cos(x)]

>> A'*A

ans =

[ cos(conj(x))*cos(x) + sin(conj(x))*sin(x), sin(conj(x))*cos(x) - cos(conj(x))*sin(x)]
[ cos(conj(x))*sin(x) - sin(conj(x))*cos(x), cos(conj(x))*cos(x) + sin(conj(x))*sin(x)]

答案1

我意識到這是一個老問題,但考慮到社區機器人有意解決這個問題,不妨回答一下。

conjMATLAB在輸出中給出的原因是因為您使用的是複共軛轉置運算子'(又稱ctranspose())。

因為這是符號數學,所以 MATLAB 不會對x實數還是複數做出任何假設,因此它必須保留conj()在輸出中 - 對於實數,該函數不執行任何操作,對於複數,它將採用共軛。

如果您使用.'相反的方法,這就是常規矩陣轉置(又稱transpose())。因此,MATLAB 不會為輸出添加任何複雜的共軛調用,因為它在執行轉置時會忽略數組的內容。

>> A'*A
 
ans =
 
[ cos(conj(x))*cos(x) + sin(conj(x))*sin(x), sin(conj(x))*cos(x) - cos(conj(x))*sin(x)]
[ cos(conj(x))*sin(x) - sin(conj(x))*cos(x), cos(conj(x))*cos(x) + sin(conj(x))*sin(x)]

>> A.'*A
 
ans =
 
[ cos(x)^2 + sin(x)^2,                   0]
[                   0, cos(x)^2 + sin(x)^2]

註:cos(x)^2 + sin(x)^2 == 1,所以ans == [1 0;0 1] == I

相關內容