Quero multiplicar uma matriz pela sua transposta para saber se ela verifica Q t Q=I.
No entanto, quando calculo no matlab, recebo algo estranho usando um conceito que não conheço: conj(x)
.
- Portanto, como multiplicar uma matriz pela sua transposta?
Aqui está o código que tentei:
>> 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)]
Responder1
Sei que esta é uma pergunta antiga, mas como o bot da comunidade pretende esbarrá-la, é melhor respondê-la.
A razão pela qual o MATLAB está fornecendo conj
a saída é porque você está usando o operador complexo de transposição conjugada '
(também conhecido como ctranspose()
).
Por se tratar de matemática simbólica, o MATLAB não faz nenhuma suposição se x
é real ou complexo, portanto deve deixar conj()
na saída - para real a função não faz nada, para complexo ela levará o conjugado.
Se você usar .'
, esta é a transposição regular da matriz (também conhecida como transpose()
). Como resultado, o MATLAB não adiciona nenhuma chamada conjugada complexa à saída porque ignora o conteúdo do array ao fazer a transposição.
>> 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]
Nota: cos(x)^2 + sin(x)^2 == 1
, então ans == [1 0;0 1] == I
.