Loading
2015. 7. 24. 07:34 - 성돌

텐서량의 좌표계 변환 (Mathematica로 쉽게하는)




텐서량을 다른 좌표계로 변환하는 방법에 대해서 이야기를 해 봅시다.


앞 서 포스팅에서 언급한 바와 같이 텐서라 불리는 것들은 
어떤 좌표계로 바라보아도 그 특성이 변하지 않는 것들을 말합니다.


즉, 텐서량을 데카르트(Cartesian) 좌표계  또는 원기둥(cylindrical) 좌표계로 기술할 수도 있는데,

어떤 좌표계로 바라보든 그 텐서량에는 변화가 없어야 하죠.

텐서량을 다른 좌표계로 변환하여 바라볼 때
좌표계 변환 행렬(coordinate transformation matrix)이 필요합니다.

Mathematica는 기본적인 좌표계인 데카르트 좌표계, 원기둥, 구면 좌표계 및 기타 좌표계들 사이에
좌표계 변환 행렬을 저장하고 있기에 이를  바로 사용하기만 하면 됩니다.

따라서 먼저 텐서량의 좌표계 변환에 대한 개념을 소개한 뒤,
이를 Mathematica로 쉽게 하는 방법에 대해서 설명하도록 하겠습니다.



우선 좌표계 변환에 대한 개념을 명확하게 하도록 하겠습니다.

아래와 같이 x1x2x3의 좌표계로 정의된 2차 텐서(예를 들어 응력 텐서)가 있을 때,
똑같은 텐서 빨간색으로 표시된
새로운 
x'1x'2x'3좌표계에서 바라보는 것이 좌표계 변환입니다.

이 좌표계 변환행렬을 구하기 위해서는

원래 좌표계에서의 단위벡터를 다른 좌표계에서의 단위벡터로 표현할 수 있어야 합니다.

예를 들어,
데카르트 좌표계에서의 단위벡터를 원기둥좌표계에서 단위벡터로써 표현할 수 있어야 합니다.

그런데 이건 생각보다 쉽지 않고,
계량 텐서(metric tensor)에 대한 이해가 다소 필요합니다.
자세한 내용에 대해서는 전파거북이님의 다른 포스팅을 참고하시면 될 듯 합니다.

[Image from wikipedia]




한 가지 더 재미있고, 엄청 중요한 점을 알려드리자면,
좌표계 변환 행렬은 회전행렬의(rotation matrix) 전치
(transpose)라는 것입니다.


회전행렬이란 아래와 같이 우리가 고등학교 때부터 많이 봐온 행렬입니다.
예를 들어, 물체를 θ만큼 회전시킬 때 회전행렬은 아래와 같습니다.


여기서 정말 중요한 건, 회전행렬과 좌표계 변환 행렬의 차이입니다.

 회전행렬은 물체를 회전시키는 거고,
좌표계 변환 행렬은 물체는 가만히 두고 좌표계를 회전시키는 겁니다.


그렇기에 θ만큼 회전시키는 변환을 생각했을 때,
좌표계 변환 행렬과 회전행렬은 서로 역방향의 관계가 있습니다.

그리고 역방향의 회전은 역행렬로 표현되고,
회전행렬의 특성 상 역행렬은 전치행렬과 동일하기에...
좌표계 변환 행렬은 회전행렬의 전치행렬이 되는 것 입니다.




이 포스팅은 좌표계 변환 행렬에 대한 포스팅인데,
굳이 회전행렬을 언급한 이유는...
Mathematica가 제공하는 행렬이 회전행렬이기 때문입니다.

하지만 지금까지 설명한 바와 같이
회전행렬의 전치행렬이 좌표계 변환 행렬이기에 별로 문제가 없습니다.

Mathematica에서 좌표계를 변환하는 행렬은 아래의 명령어로 얻을 수 있습니다.


예를 들어, 데카르트 좌표계에서 구면 좌표계로 변환하는 행렬은 아래와 같이 구할 수 있죠.


결과로 아래의 좌표계 변환 행렬을 얻을 수 있습니다.


위에서 좌표계의 이름을 적어주어야 하는데,
"
Cartesian", "Cylindrical", "Spherical"등이 가장 많이 사용될 좌표계들이고
기타 다른 좌표계들은 홈페이지를 참고합시다.




좌표계 변환 텐서를 Q라고 했을 때,
1차 텐서(벡터, t)와 2차 텐서(행렬, T)의 좌표계 변환공식은 아래와 같습니다.
.


위에서 t'과 T'는 새로운 좌표계에서의 벡터와 2차 텐서를 의미합니다.

예를 들어, 데카르트 좌표계에서 구면좌표계로 2차텐서를 변환하는 것은
아래와 같이 할 수 있습니다.