我想将一个矩阵与其转置矩阵相乘,以便知道它是否验证 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()
)。
因为这是符号数学,所以 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
。