mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-09-21 19:58:06

사원수

quaternion에서 넘어옴
[[대수학|대수학
Algebra
]]
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
이론
기본 대상 연산 · 항등식( 가비의 이 · 곱셈 공식( 통분 · 약분) · 인수분해) · 부등식( 절대부등식) · 방정식( /풀이 · ( 무연근 · 허근 · 비에트의 정리( 근과 계수의 관계) · 제곱근( 이중근호 · 개방법) · 환원 불능) · 부정 · 불능) · 비례식 · 다항식 · 산술( 시계 산술)
수 체계 자연수( 소수) · 정수( 음수) · 유리수 · 실수( 무리수( 대수적 무리수 · 초월수) · 초실수) · 복소수( 허수) · 사원수 · 팔원수 · 대수적 수 · 벡터 공간
다루는 대상과 주요 토픽
대수적 구조
군(group) 대칭군 · 기본군 · 자유군 · 리 군 · 괴물군 · 점군 · 순환군 · 군의 작용 · 동형 정리 · 실로우 정리
환(ring) 아이디얼
체(field) 갈루아 이론 · 분해체
대수 가환대수 · 리 대수 · 불 대수( 크로네커 델타)
마그마· 반군· 모노이드 자유 모노이드 · 가환 모노이드
선형대수학 벡터 · 행렬 · 텐서( 텐서곱) · 벡터 공간( 선형사상) · 가군(module) · 내적 공간( 그람-슈미트 과정 · 수반 연산자)
정리·추측
대수학의 기본정리 · 나머지 정리 · 유클리드 호제법 · 부분분수분해 · PID 위의 유한생성 가군의 기본정리 · 산술·기하 평균 부등식 · 바이어슈트라스 분해 정리 · 호지 추측미해결 · 가환대수에서의 호몰로지 추측미해결
관련 하위 분야
범주론 함자 · 수반 · 자연 변환 · 모나드 · 쌍대성 · 토포스 이론 · 타입 이론
대수 위상수학 연속변형성 · 사슬 복합체 · 호몰로지 대수학( 호몰로지 · 코호몰로지) · mapping class group · 닐센-서스턴 분류
대수기하학 대수다양체 · · 스킴 · 에탈 코호몰로지 · 모티브
대수적 정수론 타원곡선 · 디오판토스 방정식 · 유리근 정리 · 모듈러성 정리
가환대수학 스펙트럼 정리
표현론 실베스터 행렬
기타 및 관련 문서
수학 관련 정보 · 추상화 · 1학년의 꿈 · 노름 · 혼합계산 · 분배법칙 · 교환법칙 · 결합법칙 · 교재 }}}}}}}}}

수 체계
Number Systems
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-5px -1px -11px; word-break: keep-all"
사원수 [math(\mathbb H)] · 팔원수 [math(\mathbb O)]
↑ 확장 ↑
복소수 [math(\mathbb C)]
대수적 폐포, 행렬 표현, 순서쌍 구성 등 ↑ 허수 [math(\mathbb{C}
실수 [math(\mathbb R)]
완비화, 데데킨트 절단 등 ↑ 무리수 [math(\mathbb{R} \setminus \mathbb{Q} = \mathbb I)]
유리수 [math(\mathbb Q)]
곱셈의 역원 정수가 아닌 유리수 [math(\mathbb{Q} \setminus \mathbb{Z})]
정수 [math(\mathbb Z)]
덧셈의 역원 음의 정수 [math(\mathbb{Z} \setminus \mathbb{N})]
범자연수 [math(\mathbb N_0)]
↑ 자연수의 집합론적 구성 ↑
[math(0)]
소수 [math(\mathbb P)] · 초실수 [math(\mathbb R^{\ast})] · 대수적 수 [math(\mathbb A)]( 대수적 무리수 [math(\mathbb{A} \cap \mathbb{I})]) · 초월수 [math(\complement {\mathbb A})] · 벡터 공간 [math(\mathbb V)] · 이원수 · 분할복소수 }}}}}}}}}

1. 개요2. 응용
2.1. 회전 공식의 증명
3. 사원수군4. 확장5. 활용6. 여담7. 관련 문서

1. 개요

/ quaternion

해밀턴 회로를 발견한 아일랜드 수학자 윌리엄 로원 해밀턴이 창시한 수 체계. 복소수 허수 단위 [math(i)]를 도입했듯 새로운 단위 [math(j)], [math(k)]를 도입한 것이다. 복소수를 도입할 때 [math(x^{2} = -1)]이라는 대수 방정식의 해로 허수 [math(i)]를 정의했다. 그렇다면 관점을 살짝 다르게 하여 「허수라고 [math(i^{2}=-1)]이라는 수를 새로 만들었는데, 그럼 [math(i)]와는 다르지만 [math(j^{2}= -1)]인 수를 추가하여 3차원 공간을 표현하는 수를 만들 수는 없을까?」 이러한 관점에서 출발한 것이 사원수군이다.

신기하게도 [math(i)], [math(j)]만 있는 삼원수는 없다. 이는 [math(1)], [math(i)], [math(j)] 만으론 환(ring)이 형성되지 않기 때문이다. 즉, [math(a+bi+cj)] 라는 삼원수를 제곱하면 [math(ij)] 와 [math(ji)]라는 새로운 단위가 나오기 때문에[1] 이를 나타내기 위한 또 다른 단위 [math(k)]가 필요하게 되어 필연적으로 사원수가 만들어진다.

여기서 다음의 허수단위가 정의된다.
[math(i^2 = j^2 = k^2 = ijk = -1)]
[math(i, j, k)]가 서로 같지 않다는 사실은 위 공식에서 유도할 수 있다.
[math(i \neq j, j \neq k, k \neq i)]

[math(j)], [math(k)] 도 [math(i)]와 같이 제곱하면 [math(-1)]이지만 [math(i)]와는 다른 단위이며 곱셈의 교환 법칙이 성립하지 않는다. 아래와 같은 식이 성립된다. 그래서 체(field)가 아닌 꼬인체(skew field)에 속한다.
[math(jk = -kj = i)]
[math(ki = -ik = j)]
[math(ij = -ji = k)]

사원수의 허수단위들의 곱셈을 한 눈에 보기 편하게 표로 정리하면 다음과 같다.
<colbgcolor=#f5f5f5,#2d2f34> [math(a \times b)] [math(b)]
[math(1)] [math(i)] [math(j)] [math(k)]
[math(a)] <colbgcolor=#f5f5f5,#2d2f34> [math(1)] [math(1)] [math(i)] [math(j)] [math(k)]
[math(i)] [math(i)] [math(-1)] [math(k)] [math(-j)]
[math(j)] [math(j)] [math(-k)] [math(-1)] [math(i)]
[math(k)] [math(k)] [math(j)] [math(-i)] [math(-1)]

한편 많은 3D 그래픽 프로그래밍 서적에서는 벡터 표기법을 살짝 응용해서 [math(a + v_1 i + v_2 j + v_3 k)]를 [math(a + \mathbf{v})]로 쓰기도 한다. 여기서 [math(\mathbf{v})]는 각 성분이 [math(v_1)], [math(v_2)], [math(v_3)]인 3차원 벡터이다. 이 표기대로 썼을 때 다음이 성립함을 알 수 있다. 사실 창시자인 해밀턴부터 이 표기를 썼고 심지어 사원수를 실수부인 스칼라와 허수부인 벡터의 합이라고 표현하기도 했다.[2]

[math(\displaystyle (a + \mathbf{v})(b + \mathbf{w}) = ( ab - \mathbf{v} \cdot \mathbf{w} ) + a\mathbf{w} + b\mathbf{v} + \mathbf{v} \times \mathbf{w})].

여기서 [math(\mathbf{v} \cdot \mathbf{w})], [math(\mathbf{v} \times \mathbf{w})]는 각각 잘 알려진 두 3차원 벡터의 스칼라곱(내적, Inner Product)과 벡터곱(외적, Cross Product)이다.

사원수를 나타내는 집합은 고안자의 이름을 따서 [math(\mathbb{H})] 로 표현한다. [math(\mathbb{Q})]는 이미 유리수(Quotient) 집합 표현으로 이미 쓰고 있는지라 어쩔 수가 없다.

복소수가 [math(\Re)], [math(\Im)] 함수를 이용해 각 성분의 계수를 추출할 수 있지만, 사원수 이상은 이러한 기능을 하는 함수가 명시돼 있지 않다. 정 필요하다면 [math(\Re(a+bi+cj+dk) \triangleq a)], [math(\Im(a+bi+cj+dk) \triangleq b)], [math({\mathscr J}(a+bi+cj+dk) \triangleq c)], [math({\mathscr K}(a+bi+cj+dk) \triangleq d)] 같은 식으로 따로 정의하는 수밖에 없다.

2. 응용

[math(\left\{1, i\right\})]의 복소수로 좌표를 쓸 수 있듯 사원수군의 원소들을 이용해 좌표처럼 쓸 수 있다.

복소수와 마찬가지로 [math(a+bi+cj+dk)]로 표현한다. (위의 사원소군의 경우에는 정의되는 연산이 곱셈뿐이지만 여기서는 덧셈과 곱셈을 가지는 (ring) 구조를 가진다; 덧셈에 대해서는 교환법칙이 성립하며, 덧셈과 곱셈 모두 결합법칙이 성립하고, 분배법칙이 있다.) 또한 실수 상수곱(scalar multiplication) 이 당연한 방법으로 정의되며 다른 두 연산과 서로 순서를 바꾸어 계산해도 결과가 같으므로, 이는 실수 체 위의 (1을 갖는) 대수(대수 구조)(algebra)가 된다.

[math(R)](실수 체)-위의 사원수 대수는 대표적인 central division algebra이며, 19세기 후반(!)에 Frobenius는 이미 실수 체 위의 central division algebra[3]가 실수 체 [math(R)]과 사원수 대수 [math(H)] 둘 뿐임을 (유식하게는 Brauer group [math(\text{Br}\left(R\right))]을 [math(Z/2Z)]로 이해할 수 있음을) 보였다.[4] 이는 실수 계수 이차 형식(quadratic form)을 연구하는 데도 도움이 된다.[5]

또한 복소수가 평면에서의 회전을 나타내는 데 쓰이는 반면[6] 사원수는 공간에서의 회전을 나타내는 데 쓰인다.[7] 구체적인 공식은 다음과 같다.
[math(u = ai+bj+ck)] 가 공간상의 단위벡터이고 (즉 [math(a^{2}+b^{2}+c^{2}=1)])
[math(v= v_{1}i+v_{2}j+v_{3}k)] 가 공간상의 벡터이면
[math(q = \cos\left(t/2\right) + \sin\left(t/2\right)u)] 및 [math(q^{-1} = \cos\left(t/2\right) - \sin\left(t/2\right)u)]에 대해
[math(q v q^{-1})] 는 [math(v)]를 [math(u)]를 축으로 [math(t)]만큼 회전한 결과이다.[8]

실제로 벡터가 수학계에 등장하기 전까지 3차원 공간에서의 회전 변환을 행렬보다 훨씬 더 효율적으로 설명할 수 있었던 유일한 해결책이었고, 이를 제대로 이용한 곳은 이드 소프트웨어였다.[9] 물론 벡터가 나왔다고 사원수가 사장된 건 아니고, 사원수 자체가 벡터의 일종이기 때문에 범위를 확장했다 보면 된다. 실제로도 두 사원수의 벡터곱을 연산하면 행렬이 나온다. 그리고 이 개념이 컴퓨터에 쓰이면서 이 행렬연산만을 전문으로 하는 카드, 즉 그래픽 카드가 탄생하게 되었다. CUDA, OpenCL 등의 GPGPU는 이런 사원수 연산을 3D 연산에서 일반 연산으로 확장시킨 것.

사원수 [math( a + bi + cj + dk )]는 당연히 4차 실행렬로도 표현이 가능하다.

[math(\begin{pmatrix*}[r] a & -b & -c & d \\ b & a & -d & -c \\ c & d & a & b \\ -d & c & -b & a \end{pmatrix*})]


2차 복소행렬로도 가능하다.

[math(
\begin{aligned}
1 &= \begin{pmatrix*}[r] 1 & 0 \\ 0 & 1 \end{pmatrix*} \\
i &= \begin{pmatrix*}[r] 0 & -1 \\ 1 & 0 \end{pmatrix*} \\
j &= \begin{pmatrix*}[r] i & 0 \\ 0 & -i \end{pmatrix*} \\
k &= \begin{pmatrix*}[r] 0 & i \\ i & 0 \end{pmatrix*} \\
\therefore a + bi + cj + dk &= \begin{pmatrix*}[r] a + ci & -b + di \\ b + di & a - ci \end{pmatrix*}
\end{aligned} \\
)]


여담으로 복소수와 마찬가지로, 켤레사원수[10]를 취해서 원래 사원수와 곱하면 노름의 제곱이 나온다.

이는 다음과 같이 유도된다.

2.1. 회전 공식의 증명

사원수로 주어진 벡터를 회전시키는 공식이 소개되어 있다. 이 공식을 증명해 보자. 두 가지 증명을 소개할 것인데, 두번째는 수준이 높아서 숨겨 놓는다.

몇 가지 가정을 하자. 우선 [math(v)]와 [math(u)]가 나란하지 않다는 것이다. 만약 나란하다면 사실 더 할 게 없는데, 축과 나란한 벡터를 회전시켜봤자 원래 벡터가 나오기 때문이다. 그리고 편의 상 [math(v)]가 단위 벡터라고 하자. 어차피 선형성 때문에 이 경우에만 증명을 해도 충분하기 때문이다. 이제, 위의 [math(qvq^{-1})]을 전개해 보자.

[math(\displaystyle qvq^{-1} = (\cos{(\frac{t}{2})} + \sin{(\frac{t}{2})} u) v (\cos{(\frac{t}{2})} - \sin{(\frac{t}{2})} u))]
[math(\displaystyle =( \cos{(\frac{t}{2})}v + \sin{(\frac{t}{2})} uv) (\cos{(\frac{t}{2})} - \sin{(\frac{t}{2})} u))]
[math(\displaystyle = \cos^2{(\frac{t}{2})} v + \cos{(\frac{t}{2})} \sin{(\frac{t}{2})} uv - \cos{(\frac{t}{2})} \sin{(\frac{t}{2})} vu - \sin^2{(\frac{t}{2})} (uv)u)].

여기서 [math(uv)], [math(vu)], [math((uv)u)]는 모두 사원수 곱들이다. 한편, 위에서 소개한 식 덕분에 다음을 알 수 있다.

[math(\displaystyle uv = -\mathbf{u} \cdot \mathbf{v} + \mathbf{u} \times \mathbf{v})],
[math(\displaystyle vu = -\mathbf{v} \cdot \mathbf{u} + \mathbf{v} \times \mathbf{u})],
[math(\displaystyle (uv)u = (-\mathbf{u} \cdot \mathbf{v} + \mathbf{u} \times \mathbf{v})u = -(\mathbf{u} \cdot \mathbf{v}) \mathbf{u} + (\mathbf{u} \times \mathbf{v}) \times \mathbf{u})].

여기서 [math(\mathbf{y} = \frac{1}{||\mathbf{u} \times \mathbf{v}||} (\mathbf{u} \times \mathbf{v}))]라고 표기하겠다. [math(\mathbf{v})]와 [math(\mathbf{u})]가 나란하지 않다고 가정했기 때문에 이는 잘 정의된다. 한편, [math(\mathbf{v})]와 [math(\mathbf{u})]가 이루는 각을 [math(\alpha)]라고 하면 [math(\mathbf{u})], [math(\mathbf{v})] 둘 다 단위벡터이므로 [math(||\mathbf{u} \times \mathbf{v}|| = \sin{\alpha})], [math(\mathbf{u} \cdot \mathbf{v} = \cos{\alpha})]이다. 이제 이것들을 대입해 보자.

[math( \displaystyle qvq^{-1} = ((\cos^2{(\frac{t}{2})}) \mathbf{v} + (\cos{(\frac{t}{2})} \sin{(\frac{t}{2})}) ( -(\mathbf{u} \cdot \mathbf{v}) + \mathbf{u} \times \mathbf{v} ) - (\cos{(\frac{t}{2})} \sin{(\frac{t}{2})}) ( -(\mathbf{v} \cdot \mathbf{u}) + \mathbf{v} \times \mathbf{u} ) - (\sin^2{(\frac{t}{2})}) ( -(\mathbf{u} \cdot \mathbf{v}) \mathbf{u} + (\mathbf{u} \times \mathbf{v}) \times \mathbf{u} ) )]
[math( \displaystyle = ((\cos^2{(\frac{t}{2})}) \mathbf{v} + 2(\cos{(\frac{t}{2})} \sin{(\frac{t}{2})}) (\sin{\alpha}) \mathbf{y} - (\sin^2{(\frac{t}{2})}) (\sin{\alpha}) ( \mathbf{y} \times \mathbf{u} ) + (\sin^2{(\frac{t}{2})}) (\cos{\alpha}) \mathbf{u} )].

이게 무슨 짓인가 싶겠지만 여기서부터 진짜 작업이 시작된다.

파일:quaternion_formula.png

여기서 [math(\mathbf{y})]가 [math(\mathbf{u})]와 수직인 단위벡터임을 보자. 한편 [math(\mathbf{x} = \mathbf{y} \times \mathbf{u})]라고 표기하면 [math(\mathbf{y})]와 [math(\mathbf{u})]가 수직하므로 [math(\mathbf{x})]의 크기는 1이고 [math(\mathbf{y})], [math(\mathbf{u})]와 수직하다. 즉, 서로 수직인 세 단위벡터 [math(\mathbf{x})], [math(\mathbf{y})], [math(\mathbf{u})]를 얻었다. 따라서 [math(\mathbf{v})]를 이들 셋의 선형결합으로 쓸 수 있다. 그런데 [math(\mathbf{v})]는 [math(\mathbf{y})]와 수직으므로 [math(\mathbf{v})]는 [math(\mathbf{x})], [math(\mathbf{u})]로만 써진다. 게다가 다음이 성립한다.

[math( \displaystyle \mathbf{v} = (\sin{\alpha}) \mathbf{x} + (\cos{\alpha}) \mathbf{u} )].

이걸 위 식에 대입해 보자.

[math( \displaystyle qvq^{-1} = ((\cos^2{(\frac{t}{2})}) ( (\sin{\alpha}) \mathbf{x} + (\cos{\alpha}) \mathbf{u} ) + 2(\cos{(\frac{t}{2})} \sin{(\frac{t}{2})}) (\sin{\alpha}) \mathbf{y} - (\sin^2{(\frac{t}{2})}) (\sin{\alpha}) \mathbf{x} + (\sin^2{(\frac{t}{2})}) (\cos{\alpha}) \mathbf{u} )]
[math( \displaystyle = ((\cos^2{(\frac{t}{2})}) (\cos{\alpha}) \mathbf{u} + (\sin^2{(\frac{t}{2})}) (\cos{\alpha}) \mathbf{u} + (\cos^2{(\frac{t}{2})}) (\sin{\alpha}) \mathbf{x} - (\sin^2{(\frac{t}{2})}) (\sin{\alpha}) \mathbf{x} + 2(\cos{(\frac{t}{2})} \sin{(\frac{t}{2})}) (\sin{\alpha}) \mathbf{y} )]
[math( \displaystyle = (\cos{\alpha}) (\cos^2{(\frac{t}{2})} + \sin^2{(\frac{t}{2})}) \mathbf{u} + (\sin{\alpha}) ( \cos^2{(\frac{t}{2})} - \sin^2{(\frac{t}{2})}) \mathbf{x} + (\sin{\alpha}) (2 \cos{(\frac{t}{2})} \sin{(\frac{t}{2})}) \mathbf{y} )]
[math( \displaystyle = (\cos{\alpha}) \mathbf{u} + (\sin{\alpha}) \left( (\cos{t}) \mathbf{x} + (\sin{t}) \mathbf{y} \right) )].

이제 이걸 해석하는 일만 남았다. [math( \mathbf{v} = (\sin{\alpha}) \mathbf{x} + (\cos{\alpha}) \mathbf{u} )]와 [math( qvq^{-1} = (\sin{\alpha}) \left( (\cos{t}) \mathbf{x} + (\sin{t}) \mathbf{y} \right) + (\cos{\alpha}) \mathbf{u} )]를 비교해 보자. [math(\mathbf{x})]가 [math((\cos{t}) \mathbf{x} + (\sin{t}) \mathbf{y})]로 바뀌었다. 이는 [math(\mathbf{u})]를 축으로 해서 [math(\mathbf{x})]를 각도 [math(t)]만큼 회전시킨 것과 같다. 따라서 [math(qvq^{-1})]는 [math(\mathbf{v})]에서 [math(\mathbf{u})]와 수직한 성분을 꺼내다 [math(\mathbf{u})]를 축으로 [math(t)]만큼 회전시키되 [math(\mathbf{u})]와 나란한 성분은 그대로 냅둔 다음 다시 합친 것이다. 이건 그냥 [math(\mathbf{v})]를 회전시킨 것이다. 위 그림을 보면 실제로 무슨 일이 벌어진 건지 파악할 수 있을 것이다. 따라서 [math(qvq^{-1})]는 우리가 원하는 회전 결과이다.

[두번째 증명]
첫번째 증명이 다소 직관적이었다면 두번째 증명은 꽤나 추상적이다. 사원수를 2차 복소행렬로 나타내서 다루는 게 이 증명에선 아무래도 편하다. 즉, [math(q)], [math(v)]에 해당하는 2차 복소행렬을 각각 [math(Q)], [math(V)]라고 표기하고 [math(QVQ^{-1})]을 생각하겠다는 것이다.

한편, 단위 사원수(unit quarternion), 즉 [math(x^2 + y^2 + z^2 + w^2 = 1)]인 실수 [math(x)], [math(y)], [math(z)], [math(w)]에 대해 [math(A = \left( \begin{array}{ll} x + iw & y + iz \\ y - iz & x - iw \end{array} \right))]를 생각해 보자. 이때 이 행렬의 행렬식이 [math(x^2 + y^2 + z^2 + w^2)], 즉 1과 같다는 걸 알 수 있다. 이로부터 [math(A^{-1} = A^\dagger)]임을 쉽게 계산할 수 있다. [math(Q)]가 사실 이를 만족하는 행렬임을 기억해 두자. 반대로, 만약 주어진 2차 복소행렬이 유니터리(unitary)하고 1인 행렬식을 가지고 있다고 하면, 즉 [math(\det{A} = 1)]이고 [math(A^{-1} = A^\dagger)]임이 성립하면, 이 행렬이 한 사원수 행렬, 즉 어떤 사원수에 대응하는 2차 복소행렬임을 쉽게 알 수 있다. 사실 어떤 복소수 [math(z_1)], [math(z_2)], [math(z_3)], [math(z_4)]에 대해 [math(A = \left( \begin{array}{ll} z_1 & z_2 \\ z_3 & z_4 \end{array} \right))]가 유니터리하면 [math(z_1^* = z_4)], [math(z_2^* = -z_3)]임을 바로 알 수 있고, 이는 [math(A)]가 [math(\left( \begin{array}{cc} a + bi & c + di \\ -c + di & a - bi \end{array} \right))] 꼴이어야 함을, 그러므로 한 사원수 행렬이어야 함을 알 수 있다. 이렇게 해서 단위 사원수들과 행렬식 값이 1인 [math(2 \times 2)] 유니터리 행렬들 간의 일대일 대응 하나를 찾아내었다. 여기서 더 나아갈 수 있는데, 두 단위 사원수 [math(q_1)], [math(q_2)]에 대하여 이 둘 각각에 대응하는 유니터리 행렬들을 [math(Q_1)], [math(Q_2)]라고 하면, 역시 단위 사원수인 [math(q_1 q_2)]에 대응하는 유니터리 행렬이 다름 아닌 [math(Q_1 Q_2)]임을 쉽게 밝힐 수 있다. 즉, 여기서 찾아낸 일대일 대응이 심지어 군 동형사상(group isomorphism)임을 알 수 있다.[12] 좀 더 유식한 표현으로 쓰자면, 단위 사원수들로 이루어진 군(group)을 [math(\mathcal{Q})]라고 표기했을 때 위의 일대일 대응이 다름 아닌 [math(\mathcal{Q})]와 [math(SU(2))] 간의 군 동형사상임을 알아낸 것이다.

한편, 대각합의 성질과 행렬식의 성질로부터 다음이 성립한다.

[math(\displaystyle \textrm{tr}{AVA^{-1}} = \textrm{tr}{V})].
[math(\displaystyle \det{AVA^{-1}} = \det{V})].

이로부터, [math(AVA^{-1})]에 해당하는 사원수를 [math(v'_0 + v'_1 i + v'_2 j + v'_3 k)]로 표기했을 때 다음이 성립한다는 것을 알 수 있다.

[math(v'_0 = 0)], [math((v'_1)^2 + (v'_2)^2 + (v'_3)^2 = (v_1)^2 + (v_2)^2 + (v_3)^2)].

그리고 사실 이는 [math(v_1)], [math(v_2)], [math(v_3)]이 뭐가 됐든 항상 성립한다. 게다가 분명 [math((v_1, v_2, v_3))]를 [math((v'_1, v'_2, v'_3))]으로 보내는 사상(map)은 선형이다. 따라서, [math(\det{A} = 1)]인 사원수 행렬 [math(A)]에 대하여 사원수 행렬 [math(V)]를 [math(AVA^{-1})]로 보내는 사상은 직교 좌표 변환이라고 볼 수 있다.[13] 이제 이 사상을 [math(\textrm{Ad}(A))]라고 표기하겠다.[14] 즉, [math(AVA^{-1} = (\textrm{Ad}(A))V)]로 쓰겠다는 것이다.

이제 [math(Q)]를 보도록 하자. 이걸 좀 더 간단한 모양으로 써 보기 위해 [math(Q)]의 고윳값들을 찾아 보자. [math(Q)]의 대각합이 [math(2 \cos{(t/2)})]이고 행렬식이 1임을 통해 [math(Q)]의 특성다항식(characteristic polynomial)이 다음과 같음을 알 수 있다.

[math(\displaystyle t^2 - (2 \cos{(t/2)}) t + 1 = t^2 - 2(\cos{(t/2)}) t + \cos^2{(t/2)} + \sin^2{(t/2)})]
[math( = (t - \cos{(t/2)} - i \sin{(t/2)}) (t - \cos{(t/2)} + i \sin{(t/2)}))].

이로부터 다음과 같은 행렬 [math(U)]가 존재해야 함을 알 수 있다.

[math( \displaystyle Q = UQ'U^{-1} \;\;\; \left( Q' = \left( \begin{array}{cc} \cos{(t/2)} + i \sin{(t/2)} & 0 \\ 0 & \cos{(t/2)} - i \sin{(t/2)} \end{array} \right) \right) )].

그런데 사실 [math(U)]는 유니터리해야 한다. 따라서 [math(U)]는 한 사원수 행렬이고 [math(\textrm{Ad}(U))]는 직교 좌표 변환에 해당한다. 특히 [math((\textrm{Ad}(U))Q' = Q)]인데, 여기서 [math(Q)]의 벡터 성분이 [math(u)]와 같고 [math(Q')]의 벡터 성분이 [math(z)] 축과 나란한 단위 벡터 [math(\mathbf{k})]와 같다는 것으로부터 [math(\textrm{Ad}(U))]는 적어도 [math(\mathbf{k})]를 [math(u)]로 보내는 직교 변환에 해당함을 알 수 있다.[15] 그리고 물론 [math(\textrm{Ad}(U^{-1}))]는 [math(u)]를 [math(\mathbf{k})]로 보내는 직교 변환일 것이다.

이제 이걸 가지고 [math(QVQ^{-1})]가 뭔지 알아보도록 하자. 방금 구한 걸 대입하면 다음을 얻는다.

[math(\displaystyle QVQ^{-1} = \left( UQ'U^{-1} \right) V \left( UQ'U^{-1} \right)^{-1} = UQ'(U^{-1} V U) Q^{-1} U^{-1} )]
[math(\displaystyle = (\textrm{Ad}(U)) (\textrm{Ad}(Q')) (\textrm{Ad}(U^{-1})) V)].

이 변환이 진행되는 걸 말로 풀어 쓰면 이렇게 쓸 수 있겠다.

[math(v)]에 [math(u)]를 [math(\mathbf{k})]로 보내는 직교 좌표 변환을 적용한다 ([math(\textrm{Ad}(U^{-1}))])[16]
→ 그 결과에 [math(\textrm{Ad}(Q'))]를 적용한다 (역시 직교 좌표 변환)
→ 그 결과에 [math(\mathbf{k})]를 [math(u)]로 보내는 직교 좌표 변환, 정확하게는 첫번째 직교 좌표 변환의 역변환을 적용한다. ([math(\textrm{Ad}(U))])

[math(\textrm{Ad}(Q'))]가 뭐 하는 건지 보자. [math((\textrm{Ad}(Q'))V)], 즉 [math(Q'VQ'^{-1})]은 [math(q'vq'^{-1})]과 같이 쓸 수 있는데, 여기서 [math(q')]는 [math(\cos{(t/2)} + (\sin{(t/2)}) k)]와 같다. 이때 다음을 쉽게 계산할 수 있다.

[math(q'vq'^{-1} = (v_1 \cos{t} - v_2 \sin{t}) i + (v_1 \sin{t} + v_2 \cos{t}) j + v_3 k)].

그런데 이건 정확하게 [math(z)]축에 대해 [math(t)]만큼 회전시킨 결과이다.

사실 [math(u)]를 축으로 해서 [math(t)]만큼 회전시킨다는 건 다음과 같은 절차로 진행할 수 있다.

[math(u)]를 [math(\mathbf{k})]로 보내는 직교 좌표 변환을 적용한다
→ [math(z)] 축에 대해 [math(t)]만큼 회전시킨다
→ 첫번째 직교 좌표의 역변환을 적용시켜서 [math(\mathbf{k})]를 [math(u)]로 보낸다.

이는 위에서 [math(QVQ^{-1})]를 분해시켜서 얻은 변환 절차와 똑같다. 따라서 [math(QVQ^{-1})], 혹은 [math(qvq^{-1})]는 다름 아닌 [math(u)]를 축으로 하여 [math(v)]를 [math(t)]만큼 회전시킨 벡터에 대응하는 것임을 알 수 있다.

3. 사원수군

[math(Q_{8}=\left\{\pm 1, \pm i,\pm j\pm k\right\})]는 원소의 개수가 8개인 비가환군[17]이 된다. 또한 사원수군의 모든 부분군은 정규부분군이다.

4. 확장

사원수는 복소수의 확장이듯이, 사원수도 더 확장하여 팔원수를 만들 수 있다.

파일:상세 내용 아이콘.svg   자세한 내용은 팔원수 문서
번 문단을
부분을
참고하십시오.
파일:상세 내용 아이콘.svg   자세한 내용은 팔원수 문서
번 문단을
활용과 확장 부분을
참고하십시오.

5. 활용

의외로 사원수를 이용하는 것이 더 효율적이어서 최근에 각광을 받기 시작한 분야가 있는데 뜬금없겠지만 컴퓨터 애니메이션에서 뜨기 시작했다. 아닌 게 아니라 기존에 사용하던 오일러 각 체계를 사용 시 발생할 수 있었던 짐벌 잠김(gimbal lock)[18] 현상을 없앨 수 있기 때문이다. 짐벌 잠김 문제는 초창기 우주선들이 가지고 있었던 문제 중 하나로, 우주비행사들은 이 현상을 수동으로 회피하는 수 밖에 없었다. 실제로 아폴로 우주선에 탑재된 항법 컴퓨터들(계산 수식이 회로 형태로 내장된)은 사원수 대신 행렬 기반으로 짜여져 있어서 짐벌이 잠겨 버리면 경고를 표시하고 '리셋용 버튼' 을 눌러 우주비행사가 직접 조치를 취해줘야 했다.

3D 그래픽 태동기 시절 회전 변환을 처리할 때, 행렬은 9개 성분이었고 사원수는 4개의 사원수 성분[19]을 처리해야 하므로 계산량이 더 많다고 여겨져(+이걸 계산하면 왜 회전이 되는지 이해하기가 어려워) 별로 채택되지 않았다.[20] 그러다가 3D 그래픽의 적용범위와 요구기능이 점점 늘어나고 회전 연산량이 급격히 증가함에 따라 사원수가 다시 대두되었다. 행렬로 짐벌 잠김을 회피하는 특수한 계산법을 구현하기보다 곱셈만 계속하면 되는 사원수의 처리방식이 직관적으로 표현하기에 좀더 쉽고 프로그래밍 하기가 편하기에 공식의 이해야 수학자들이 해놓은 것을 믿고, 계산은 컴퓨터에게 맡겨 버리는 방법으로 널리 쓰이게 되었다. 게다가 두 회전의 곱을 계산할 때에는 행렬보다 사원수 계산이 더 적은 연산량을 요구하며[21], 이 때문에 필요한 회전 연산들을 일단 모두 사원수 꼴로 해서 곱한 다음 그 결과물을 원하는 벡터에다 적용시켜 계산량을 많이 줄일 수 있다. 3D 태동기 시절 유즈넷이나 해외 포럼들에는 사원수의 우월성을 주장하는 파벌과 행렬로도 다 할수 있는데 사원수를 쓰자는 건 과시에 지나지 않는다는 파벌이 나뉘어 박터지게 싸웠었다(간단히 정리하자면 사원수파 vs 행렬파.). 단순히 기술토론이 아니라 나름 업계 경력자들이자 네임드들이 정말 서로를 멍청한 놈 취급하고 비꼬면서 무시무시한 게시판 콜로세움을 벌였었다.

이런 이유로 인해서, 로봇 팔과 같이 회전 운동이 필요한 상황은 대부분 사원수를 이용하여 프로그래밍되어 있다.

또한, 인공위성의 자세를 제어하는 기술에서도 사원수가 활용되고 있으며, 컬러영상을 푸리에 변환하거나 고속 콘볼루션 필터링 할때도 쓰인다.

초창기 맥스웰 방정식은 사원수로 기술되었다. 오늘날에 흔히 볼 수 있는 형태는 올리버 헤비사이드 벡터의 꼴로 정리한 것이다.

6. 여담

7. 관련 문서

연산
Numbers and Operations
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#765432> 수 체계 자연수 ( 홀수 · 짝수 · 소수 · 합성수) · 정수 · 유리수 ( 정수가 아닌 유리수) · 실수 ( 무리수 · 초월수) · 복소수 ( 허수) · 사원수
표현 숫자 ( 아라비아 숫자 · 로마 숫자 · 그리스 숫자) · 기수법( 과학적 기수법 · E 표기법 · 커누스 윗화살표 표기법 · 콘웨이 연쇄 화살표 표기법 · BEAF· 버드 표기법) · 진법 ( 십진법 · 이진법 · 8진법 · 12진법 · 16진법 · 60진법) · 분수 ( 분모 · 분자 · 기약분수 · 번분수 · 연분수 · 통분 · 약분) · 소수 { 유한소수 · 무한소수 ( 순환소수 · 비순환소수)} · 환원 불능 · 미지수 · 변수 · 상수
연산 사칙연산 ( 덧셈 · 뺄셈 · 곱셈 구구단 · 나눗셈) · 역수 · 절댓값 · 제곱근 ( 이중근호) · 거듭제곱 · 로그 ( 상용로그 · 자연로그 · 이진로그) · 검산 · 연산자 · 교환자
방식 암산 · 세로셈법 · 주판 · 산가지 · 네이피어 계산봉 · 계산기 · 계산자
용어 이항연산( 표기법) · 항등원과 역원 · 교환법칙 · 결합법칙 · 분배법칙
기타 수에 관련된 사항 ( 0과 1 사이의 수 · 음수 · 작은 수 · 큰 수) · 혼합 계산 ( 48÷2(9+3) · 111+1×2=224 · 2+2×2) · 0으로 나누기( 바퀴 이론) · 0의 0제곱 }}}}}}}}}


[1] 이것들이 [math(a + bi + cj)] 꼴로 써질 수도 있지 않냐고 할 수 있는데, 결합 법칙 때문에 문제가 생긴다는 것을 알 수 있다. 이 상황에서 [math(i(ij) = (ii)j)], [math(j(ji) = (jj)i)]에 앞의 꼴을 대입하여 계산해 보면 모순이 생긴다는 것을 알 수 있다. [2] 그래서 실수부와 허수부로 나누는 복소수와는 다르게, 실수부를 스칼라부(Scalar Part), 허수부를 벡터부(Vector Part)라고 표기하기도 한다. [3] Center가 주어진 base field와 같은 division algebra를 말한다. [4] Frobenius theorem을 찾으면 보통 division algebra over R (central or not)이 [math(\mathbb{R}, \; \mathbb{C}, \; \mathbb{H})] 뿐인 것으로 소개된다. [math(\mathbb{C})]가 central division ring over R은 아니기에 어찌 보면 본문의 서술이나 이거나 비슷하다. [5] 관심 있다면, noncommutative algebra 또는 quadratic form을 다루는 기초 교재에서 더 일반적인 "사원수" 대수를 찾아 보자. T.Y.Lam의 introduction to quadratic forms over fields (GSM series)를 추천. 베고 자기도 좋다. [6] 평면에 위치한 점을 [math(a+bi)]로 표현하면, [math(1)]을 곱하면 제자리, [math(i)]를 곱하면 90도 회전, [math(-1)]을 곱하면 180도 회전, [math(-i)]를 곱하면 270도 회전. [7] 책을 들고 앞으로 한번 180도 회전(뒤집기), 옆으로 90도 회전을 해보자. 그런 다음 순서를 바꿔서 옆으로 한 번, 앞으로 한 번 회전한 것과 비교해보자. 누가 봐도 교환법칙이 성립 안 한다는 것을 볼 수 있다.(게다가 방향도 정 반대로 되어있다.) 교환법칙도 성립 안 하는 저런 복잡한 수체계를 도입하는 이유를 알 수 있을 것이다. [8] 출처: John Stillwell, Naive Lie Theory, Springer, 2008, section 1.5 [9] 누르기 귀찮은 분들을 위해 부연설명하자면, 초창기 3D 게임 엔진에 적용되었다는 뜻이다. 실제로 많은 게임 프로그래밍 교재들에서 사원수를 회전 변환으로 활용하는 방법을 소개한다. 다만 이드 소프트웨어에서 최초로 3D 게임에 적용한 건지는 확실치 않으며, 3D 그래픽에 사원수를 적용하자는 아이디어는 1985년도에 이미 제안된 바 있다. [10] 복소수처럼 허수부의 부호 3개를 전부 반전시킨다. [11] 사원수는 교환법칙이 성립하지 않으므로 전부 분리해서 기재. [12] 당연하지만 이 동형사상이 [math(\mathbb{R})]-대수 동형사상([math(\mathbb{R})]-algebra isomorphism)이진 않다. 단위 사원수들만 가지고 생각하고 있다는 상황에서부터 이미 불가능하긴 하다. [13] 여담이지만 이게 SO(3) 군을 표현(represent)하는 방법 중 하나이다. SU(2)를 표현하는 방법일 수도 있겠으나, 주의해야 할 점은 SU(2)의 표현으로 볼 경우 더 이상 일대일 대응에 해당하는 표현으로 볼 수 없다는 것이다. 왜냐하면 [math((-Q)V(-Q)^{-1} = QVQ^{-1})]이기 때문이다. (단위 사원수와 SU(2) 간의 일대일 대응과는 다른 이야기이다.) 좀 더 있어 보이는 표현으로 이 표현(representation)은 faithful하지 않다고 할 수 있겠다. [14] Adjoint representation에서 따온 표기법이다. 리 군론 (Lie group theory) 등에서 몹시 자주 쓰인다. [15] 사실 [math(\mathbf{k})]를 [math(u)]로 보내는 직교 변환이 하나만 있지는 않다. [math(u)]와 수직이면서 서로 직교하는 두 단위 벡터 쌍을 얼마든지 찾을 수 있으며, 이들 각각에 [math(\mathbf{i})]와 [math(\mathbf{j})]를 보내는 직교 변환을 얼마든지 생각할 수 있다. 다만 걱정할 필요는 없는데, 정작 어느 직교 변환을 생각하더라도 향을 보존하고 [math(\mathbf{k})]를 [math(u)]로 잘 보내기만 한다면 이어지는 내용을 전개하는데 있어서는 아무런 영향이 없기 때문이다. 예를 들어 속 편하게 첫번째 증명에서 제시된 벡터들을 이용해도 별로 상관은 없다. [16] 이는 [math((\textrm{Ad}(U))^{-1})]과 같다. [17] 교환법칙이 성립하지 않는 군 [18] 피치, , 요우 중에서 피치 각이 90도일 때, 롤과 요우를 나타내는 짐벌이 겹쳐버려, 좌우 움직임 즉 요우(Yaw) 움직임을 나타낼 수 없게 되는 현상. 즉 요우를 나타내는 짐벌이 잠겨 버리는 현상. [19] 즉 16개의 실수 성분이 필요하다. [20] 실제로 초창기 소프트웨어 3D 래스터라이저(그래픽카드가 아니라 사람이 모든 3차원 좌표를 화면상의 XY 좌표로 일일이 계산하는) 코드들을 보면 모델/뷰/투영 행렬을 이용해 계산하는 방식을 많이 썼다. [21] 두 3×3 행렬의 곱은 최소 27번의 곱셈과 18번의 덧셈을 요구하는 반면, 두 사원수의 곱은 16번의 곱셈과 7번의 덧셈(및 뺄셈)으로 충분하다.