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