2011년 6월 23일 목요일

텐서(tensor)



[경고] 아래 글을 읽지 않고 "텐서"를 보면 바보로 느껴질 수 있습니다.
1. 좌표계 기반 벡터
2. 행렬


[그림 1] 응력 텐서의 기하학적 표현(출처: wikipedia.org)

고급 물리학에 주로 쓰이는 텐서(tensor)는 여러 가지 면에서 악명이 높다[1]. 예를 들어 이런 질문을 해보자. 텐서[2]는 수학에서 생겨났는가 물리학에서 생겨났는가? 텐서를 이해하려면 수학적 접근을 해야하나 물리적 상상력 기반으로 생각해야하나? 텐서는 단순한 표기법인가? 헷갈리는 텐서 대신 벡터나 행렬을 쓰는 게 편하지 않나? 등등.
이처럼 텐서를 바라보는 관점을 제대로 갖추지 못하면 텐서 이론은 알아듣지 못하는 외계인의 언어가 된다. 그 다음 과정은 잘 아는 것처럼 '그냥 포기'. 하지만 포기하지 말자. 아래 글을 계속 읽으면 위 질문들의 답을 찾을 수 있다.

텐서를 이해하려면 스칼라(scalar), 벡터(vector), 행렬(matrix), 미분법(differentiation) 개념이 필요하다. 이런 텐서의 창안자는 한 명을 꼭 집어 말하기는 어렵다. 왜냐하면 텐서는 여러 수학자들이 점진적으로 정립한 개념이기 때문이다. 하지만 텐서 개념을 낸 초기 수학자는 미분 기하학(differential geometry)을 창안한 가우스(Carl Friedrich Gauss)이다[3]. 가우스가 만들었으면 각오 단단히 하자, 쉽지 않다!
텐서가 출현한 배경에는 기하학이 자리잡고 있지만 텐서의 엄밀한 정의는 쉽지 않다. 간단하게 이야기하면 텐서는 임의의 기하 구조를 좌표 독립(座標獨立, coordinate independent)적으로 표현하기 위한 표기법이다. (아니면 더 쉽게 좌표 불변성을 가진 다중 벡터 모음을 텐서로 생각할 수 있다.) 예를 들면 삼각형이라는 실체는 데카르트 좌표계, 원통 좌표계, 구 좌표계 등으로 표현할 수 있고 해당하는 좌표값도 선택한 좌표계에 따라 달라지지만 삼각형이라는 특성은 좌표계 독립이라 변하지 않는다. 이런 성질을 기술하는 언어가 텐서가 된다. 이런 텐서의 수학적 성질이 물리학으로 적용되면 특정한 물리법칙이 좌표계에 관계없이 적용된다는 데에도 이를 수가 있다. 텐서의 좌표 독립성을 적극적으로 활용하는 분야가 상대성(相對性, relativity)이론이다. 텐서이론이 물리학을 위해 개발되지는 않았지만 측량(기하학의 어원이 측량임)과 밀접한 관계가 있기 때문에 수학과 물리학적 특성이 혼재되어 있다. 텐서가 수학적으로 난해해 보일지라도 우리는 텐서에 대한 물리적/시각적 상상력을 가져야 한다. 이것없이는 텐서에 대한 제대로된 수학적 형상을 만들기가 힘들다. 이것은 모든 수학분야에도 그대로 적용될 수 있다. 수학의 정리들은 책에만 있는 것이 아니고 우리 주변에 분명히 존재한다.
좀더 시각적으로 보기 위해  [그림 1]의 응력 텐서(應力, stress tensor)를 보자.
3차원 공간상에서 특정한 방향으로 힘([그림 1]의 $T$)을 받았을 때 변형력(stress)이 생기는 크기와 방향([그림 1]의$\sigma$)을 정확히 표현해주는 양이 응력 텐서가 된다. 텐서의 어원이 '잡아당기다(stretch)'를 뜻하는 라틴어(Latin) 'tensus'인 것은 우연이 아니다. 즉, [그림 1]의 응력 텐서가 뜻하는 것처럼 무언가를 잡아당기면 그 변형은 굉장히 복잡하게 일어나게 된다. 이를 기술하는 수학적 언어가 텐서가 되는 것이다.

[그림 2] 3차원 공간에서 위치 벡터 표현(출처: wikipedia.org)

또한 텐서를 다르게 표현하면 벡터와 행렬의 확장으로 볼 수 있다. (다만 이것은 정확한 표현이 아니다. 모든 벡터 혹은 행렬이 텐서가 되는 것이 아니다. 텐서는 좌표 독립 특성을 반드시 가져야 한다.)
벡터는 실수 혹은 복소수(complex number)의 확장이다. 실수 혹은 복소수는 하나의 값(특성)을 표현하지만 이를 확장한 [그림 2]의 벡터는 위치 벡터(position vector) 관점에서 $n$차원 공간의 크기(magnitude)와 방향(direction)을 표현할 수 있다. 3차원인 경우의 위치 벡터는 원점 $(0, 0, 0)$과 좌표점 $(x, y, z)$ 사이를 잇는 직선을 이용해 [그림 2]처럼 크기와 방향을 표현한다. 차원이 늘어나면 자연적으로 좌표점을 표현하는 좌표의 수가 늘어난다.

[그림 3] M × N 행렬의 정의(출처: wikipedia.org)

[그림 3]의 행렬은 벡터를 일반화한 것이라 생각할 수 있다. 즉, 서로 다른 위치 벡터 $\bar r = (a_1, a_2, a_3, \cdots)$를 일렬로 배치한 것이 행렬이라 생각할 수 있다. 이 개념을 표현한 것이 식 (1)이다.

                         (1)

식 (1)에서 $\bar r_n$은 행벡터(row vector: 행방향으로 늘어선 벡터 or 행의 크기는 1이고 열의 크기가 1이상인 행렬)로 가정했다. 그래서 $\bar r_1$, $\cdots$, $\bar r_n$이 구성하는 벡터는 [그림 3]과 같은 행렬(matrix)이 된다.
위치 벡터를 여러 개 배치한 행렬이 하는 역할은 무엇인가? 식 (1)에 제시한 것처럼 위치 벡터를 선형으로 자유롭게 변형하는 일을 하는 것이 행렬이다.
벡터를 일반화하는 방법은 여러 가지이기 때문에 반드시 식 (1)로 일반화할 필요는 없다. 벡터를 일반화하는 방법 중의 하나가 식 (2)의 다이애드(dyad)이다. 다이애드의 어원은 '2인조'를 뜻하는 라틴어(Latin) 'dyas'이다.
2차원 위치 벡터를 이용해 2차원 다이애드를 표현하면 다음과 같다.

                         (2)

식 (2)를 보면 벡터들을 별다른 기호없이 일렬로 배치했다. 이러한 곱은 다이애드곱(dyadic product)이라 한다. 이 다이애드곱과 동일한 표현은 식 (2)에 있는 동그라미+곱하기 기호($\otimes$)를 사용하는 텐서곱(tensor product)이다.
벡터를 나란히 배열하는 것을 제외하면 다이애드는 벡터 연산의 특성을 그대로 가지고 있다. 즉, 다이애드에 벡터 내적(inner product)과 벡터 외적(outer product)을 쉽게 적용할 수 있다. (어쨌건 식 (2)에 내적과 외적을 적용할 때는 벡터곱으로 생각하면 되므로 쉽다.) 예를 들어, 식 (2)의 다이애드에 벡터 내적을 적용하면 다음과 같다.

                         (3)

식 (3)이 재미있는 것은 다이애드와 벡터의 내적은 벡터를 생성하고 등가적으로 행렬 곱셈과 동일하다. 이것을 일반화하면 $n$차원 공간에 대해서도 성립하게 할 수 있다. (∵ 식 (3)의 위치 벡터 원소갯수를 $n$개로 하면 자연스럽게 $n$차원 공간으로 연산이 확장된다.)
식 (2)에서 벡터 배열을 두 개로 하면 다이애드, 세 개면 트라이애드(triad) 등등으로 확장할 수 있다.
이제 텐서 이야기를 해보도록 하자. 텐서는 식 (2)와 같은 다이애드, 트라이애드 등의 확장이라고 대충 생각할 수 있다. 식 (2)와 같이 텐서를 표현하는 일렬로 배치된 벡터의 수는 텐서의 차수(order or rank of tensor)라고 한다. 텐서의 차수로 스칼라, 벡터, 행렬, 다이애드 등을 설명하면 아래와 같다.
  • 0차 텐서: 벡터가 없기 때문에 스칼라임
  • 1차 텐서: 벡터가 하나 있기 때문에 벡터임
  • 2차 텐서: 벡터가 두 개 일렬로 있기 때문에 행렬이나 다이애드임
  • 3차 텐서: 벡터가 세 개 일렬로 있기 때문에 트라이애드임 
조심할 부분은 위 관계의 역은 반드시 성립하지는 않는다는 것이다. 텐서가 벡터, 행렬, 다이애드와 매우 유사하지만 다른 것들과 구별되는 분명한 특성이 있다. 바로 좌표 독립 특성이다. 즉, 벡터, 행렬, 다이애드는 좌표 독립 특성과는 상관없이 정의된 개념이지만 텐서는 반드시 좌표 독립 특성을 가져야 한다.
좌표 독립 특성이라는 것은 내가 설정한 좌표계와는 상관없이 어떤 양이 독립적으로 존재하는 것이다. 이를 이해하기 위해 [1]에 나오는 몇 가지 예들을 살펴보자.

Doppler-Effekt Animation[그림 4] 도플러 효과(출처: Wikipedia)

어떤 관찰자 A가 시간 $t$와 위치 $\bar P$에서 온도($T$)를 측정한다고 하자. 또다른 관찰자 B는 A와는 다르게 움직이고 있다. (or 다른 좌표계에 있다.) 역시 B도 시간 $t$와 위치 $\bar P$에서 온도($T'$)를 측정했다. $T = T'$가 성립하는가? 관찰자가 측정에 영향을 주지 않기 때문에 $T = T'$가 성립한다. 좌표 독립성이 증명되었기 때문에 온도량 $T$는 0차 텐서(스칼라)라고 할 수 있다.
다음으로 관찰자 A가 어떤 빛에서 나오는 주파수($f$)를 시간 $t$와 위치 $\bar P$에서 측정하고 있다. 다르게 움직이는 B도 동일한 특성($f'$)을 시간 $t$와 위치 $\bar P$에서 측정하였다. $f = f'$가 성립하는가? 운동체의 속력과 방향에 따라 주파수가 다르게 측정된다는 [그림 4]의 도플러 효과(Doppler effect)가 있기 때문에 $f \ne f'$이므로 주파수는 0차 텐서가 될 수 없다. 또한, 스칼라라는 개념이 더 크기 때문에(∵ 좌표 독립이든 아니든 값을 가지고 있으면 스칼라가 되므로) 스칼라는 0차 텐서를 포함한다.
[그림 2]와 같은 위치 벡터는 1차 텐서가 되는가? 어떤 관찰자 A의 위치 $\bar P$에 대한 위치 벡터($\bar R$)와 또다른 관찰자 B의 동일한 위치 $\bar P$에 대한 위치 벡터($\bar R'$)는 일반적으로 다르다. 왜냐하면 위치 벡터를 정의하기 위해 사용한 원점이 관찰자 A와 B에 대해 다르기 때문이다. (일반적으로 좌표계 A, B가 원점을 공통으로 소유할 필요는 없다.) 즉, $\bar R \ne \bar R'$이기 때문에 위치 벡터는 벡터이지만 1차 텐서는 될 수 없다.

[그림 5] 위치 벡터의 차이(출처: wikipedia.org)

그러면 위치 벡터를 텐서가 되게 만들 방법은 없는가? 있다. [그림 5]의 위치 벡터 차이를 생각하면 된다. 관찰자 A가 위치 $\bar P_1, \bar P_2$에 대해 위치 벡터의 차이(= $\bar R_2- \bar R_1$)를 정의하고 관찰자 B도 동일한 위치 $\bar P_1, \bar P_2$에 대해 위치 벡터의 차이(= $\bar R_2'-\bar R_1'$)를 정한다면 위치 벡터의 차이는 1차 텐서가 된다.
위치 벡터의 차이(difference)가 항상 1차 텐서가 된다는 것은 텐서의 중요한 속성을 표현해준 다. 위치 벡터 차이라는 개념은 별 게 아니다. 일반적으로 벡터를 정의할 때 원점의 위치와는 관계없이 [그림 5]와 같이 두 점을 빼주어 정의하므로 통상적인 벡터는 좌표 불변성(coordinate invariant)을 가진다.
또한, 위치 벡터의 차이를 한없이 줄여가면 위치 벡터의 미분(differential)이 되므로 미분 속성도 좌표 불변성을 표현해줄 수 있다.

[참고문헌]
[1] J. C. Kolecki, "An introduction to tensors for students of physics and engineering," NASA/TM—2002-211716, Sept. 2002.
[2] kipid, 텐서(Tensor)와 상대론(Relativity) - 0. 텐서(Tensor)란?, kipid's blog, 2012.
[3] C. F. Gauss, Disquisitiones Generales Circa Superficies Curvas (General Investigations of Curved Surfaces), 1827.


[다음 읽을거리]
1. 텐서와 좌표변환
2. 텐서 미적분학
3. 직교 좌표계 텐서 미적분학

댓글 34개 :

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
    답글
    1. 링크들어가보니 비공개라고....
      다음 블로그에서 검색해도 나오지않고
      들어가는 방법아시는분

      삭제
  2. 위 링크를 참고문헌으로 추가했습니다.
    저도 시간이 나면 텐서이론을 일반 상대성이론으로까지 확장하고 싶은데요...
    참고 많이 하겠습니다.

    답글삭제
  3. 이제 막 Computer Vision 공부를 시작했는데, 다중 뷰를 처리 할 때 Tensor 개념이 나왔습니다. 해서 자료를 찾던 중, 좋은 글을 발견했네요. 감사하고, 글을 퍼가는 것 보다는 여기 와서 보도록 링크를 퍼가는게 좋겠네요.

    답글삭제
    답글
    1. 방문 감사합니다.
      출처만 밝히시면 퍼가는 것도 문제 없습니다.

      텐서 개념 자체는 쉽지만 이를 이용해 계산하는 일은 상당한 노력이 많이 필요합니다.
      "참을 인"을 많이 쓰셔야 할 것입니다. ^^

      삭제
  4. 늘 역학공부하면서 텐서개념이 잘 안 섰는데,
    이번에는 제대로 텐서 개념을 세워보려고 하던 중에
    너무 좋을 글을 발견했네요.
    덕분에 텐서에 대한 느낌이 조금 오는 것 같습니다.
    포스팅 된 글들 유용하게 읽어보겠습니다. 감사합니다^^

    답글삭제
    답글
    1. 도움 되었다니 기분 좋습니다.
      자주 놀러 오세요.

      삭제
  5. 좋은글 잘 읽었습니다 그런데 엄밀히 말하면 (1)식은

    Rj = [R1 ...Rn][A1
    ...
    An]

    이 맞지않나싶습니다

    답글삭제
    답글
    1. 감사합니다.

      저는 rn을 행벡터(row vector)로 가정했습니다. 위 식처럼 하면 rn을 열벡터(column vector)로 가정하는 것입니다.

      삭제
  6. 왠지 사원수 냄세가 나요. 다른건가요?

    답글삭제
    답글
    1. 사원수에서 나온게 벡터이고 벡터를 확장한 것이 텐서입니다. ^^

      삭제
  7. 아직 고등 교육과정을 안배워서 그런지 엄청 어렵네요;;

    답글삭제
    답글
    1. -.-;; 쉽지 않지만, 계속 도전하세요, 익명님. 될 때까지!

      삭제
  8. 텐서에서 곱셈의 종류는 뭐가 있나요?

    답글삭제
    답글
    1. 행렬처럼 생각하면 쉽습니다. 행렬 곱셈을 하면 차원이 늘기도 하고 줄기도 합니다.
      벡터적으로 보면 내적, 외적, n애드 등으로 생각할 수 있습니다.
      아래 링크 참고하세요.

      http://ghebook.blogspot.com/2011/06/tensor-coordinate-transformation.html

      삭제
    2. 결국 텐서에서
      곱셈의 종류는
      내적,외적,n애드 이렇게 3가지라는 것이네요? 그렇지요? ㅎㅎ

      삭제
    3. 제가 지금 벡터,텐서에 관심이 많아서
      벡터,텐서를 공부하고 있거든요. ^^
      그러면 내적은 2개의 3차 텐서(차원이 각각 2,2,2인 텐서)가 있다면 연산하면 3+3-2차 텐서 즉, 4차 텐서가 되는 것이고,
      외적은 2개의 3차 텐서(차원이 각각 2,2,2인 텐서)가 있다면 연산하면
      3+3텐서 즉, 6차 텐서가 되는 것이고
      다이애드(dyad,dyadic)는 내적을 하는 과정에서 텐서차수를 4 정도 빼는 것이지요?

      삭제
    4. 텐서가 복잡하다고 생각되면 아래 링크의 식 (24)처럼 1차 텐서의 곱으로 생각하면 쉽습니다.

      http://ghebook.blogspot.com/2011/06/tensor-coordinate-transformation.html

      공변을 곱하는지 반변을 곱하는지에 따라 최종 결과의 차수가 달라지기 때문에, 곱하는 항의 반변이나 공변 여부가 있어야 결과식 차수 결정이 가능합니다. 1차 텐서의 연산만 보면 아래와 같습니다.

      - 내적: 1차 공변 텐서와 1차 반변 텐서를 서로 곱하여 0차 텐서 생성
      - 외적: 1차 공변 텐서끼리 곱하여 1차 반변 텐서 생성 or 1차 반변 텐서끼리 곱하여 1차 공변 텐서 생성
      - 다이애드: 1차 공변 텐서끼리 or 1차 반변 텐서끼리 곱하여 2차 텐서 생성

      삭제
  9. 멋진 정리 잘 읽었습니다. 감사합니다.

    답글삭제
  10. 멋진 정리 잘 읽었습니다. 감사합니다.

    답글삭제
  11. 행렬에는 determinant, inverse가 있어요.
    그러면 3차 텐서에도 determinant, inverse가 있고 그것들을 계산할 수 있나요?
    3차 텐서의 determinant, inverse를 구하는 방법을
    mathrbs@naver.com 으로 보내주실 수 있겠는가요? ㅠㅠ

    답글삭제
    답글
    1. 텐서 이론을 이용해 역텐서(inverse tensor)를 정의할 수 있겠지만, 텐서곱 자체가 너무 다양해서 역텐서의 존재성 자체부터가 고민이겠는데요.
      mathrbs님 문제에 적합한 텐서곱을 정의하는 것부터 시작하세요. ^^

      삭제
  12. 3차 텐서의 determinant를 "hyperdeterminant" 라고도 하는데요.
    정말로 3차 텐서의 determinant가 존재하는 건가요?

    답글삭제
    답글
    1. 초판별식(hyperdeterminant)이란 용어는 처음 듣네요, mathrbs님. ㅜㅜ

      삭제
  13. http://m.blog.naver.com/jintaeky/220554439620
    제가 텐서에 관심이 많아서 인터넷울 뒤지던중,
    전파거북이님과 매우 흡사한글이 출처없이 있어서
    혹시나 하여 링크를 걸어두었습니다!

    전자거북이님 좋은 글 갑사드립니다!

    답글삭제
    답글
    1. 만화에땅님, 새해부터 방문 감사합니다. ^^

      삭제
  14. 이글과 아래 링크를 읽어보고, 텐서에 대해서 이해한것같아요. 여기 오신분들도 도움이 될거 같아서 댓글 남겨봅니다.

    http://egloos.zum.com/hanmihye/v/3256824

    아인슈타인의 상대론이란 다름 아니라, 물리량을 나타내는 벡터 또는
    텐서가 SO(3)벡터나 SO(3)텐서가 아니라 SO(1,3)벡터나 SO(1,3)텐서라는
    주장에 지나지 않습니다. 즉, 시간까지를 고려해서 4차원에 근간을
    두고 물리량을 기술해야 한다는 거죠. 물론 비상대론적 극한에서는
    여전히 구태의연한 SO(3)가 우위에 있으니까, 뭐 구관이 명관이라고나
    할런지, 아직은 리어왕인지....

    답글삭제
  15. 음,, 전달현상 과목때문에 텐서라는 개념을 배우고 있는데 정말 어렵군요,,
    텐서의 차수부분이 잘 이해가 안가는데 ㅜㅜ
    1차 텐서는 벡터가 하나 있어서 벡터이고
    2차 텐서는 벡터가 두개가 있어서 행렬이나, 다이아드라고 하셨는데
    그럼 보통 공간상으로 나타내는 좌표는 x,y,z 3개의 벡터로 표현하므로
    3X3 행렬은 3차 텐서인건가요? 그리고 2차텐서는 벡터 두개이므로 평면을 나타내는것이고
    3차텐서는 벡터가 3개이므로 입체적 공간을 나타내는것인가요? 차수와 차원의 개념이 헷갈리네요 ㅜㅜ

    답글삭제
    답글
    1. 채수빈님, 아닙니다. ^^

      3차 텐서가 되려면 벡터 3개가 독립적으로 나열될 수 있어야 합니다. 좌표계 기준으로 표현하면 원소가 $l \times m \times n$ 이런 형태로 표현되어야 합니다.
      $3 \times 3$ 행렬은 3차원 벡터 2개가 나열되어 있어 2차 텐서가 될 수 있습니다. (물론 필요 조건이에요.)

      삭제
  16. 안녕하세요 전파거북님!! 글 정말 잘읽었습니다~~
    저 질문이하나있습니다! 텐서식을 보면서 생각해봤는데 텐서를 벡터무더기 그러니깐 방향성이 여러개인 벡터로서 이해해도되나요???

    답글삭제
    답글
    1. 비슷하지만 중요한 한 가지가 빠졌습니다. 텐서는 반드시 "좌표 독립성"이 성립해야 합니다. 벡터를 모으기만 하면 "좌표 독립성" 여부를 모르기 때문에 텐서가 될지 아닐지를 알 수 없습니다.

      삭제
    2. 그렇군요!! 정말 감사합니다!!

      삭제

욕설이나 스팸글은 삭제될 수 있습니다. [전파거북이]는 선플운동의 아름다운 인터넷을 지지합니다.