행렬에 전치된 행렬을 곱하는 방법은 무엇입니까?

행렬에 전치된 행렬을 곱하는 방법은 무엇입니까?

나는 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.

관련 정보