行列に転置されたものを掛けるにはどうすればいいですか?

行列に転置されたものを掛けるにはどうすればいいですか?

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()) を使用しているためです。

xこれは記号計算であるため、MATLAB はが実数か複素数かについての仮定を行わず、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

関連情報