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
これは古い質問だとはわかっていますが、コミュニティ ボットがこの質問を取り上げようとしていることを考えると、答えておいたほうがよいでしょう。
conj
MATLAB が出力でこれを示している理由は、複素共役転置演算子'
(別名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
。