7.8 다양체와 표현의 기하

실습 · 연습문제 2개

SO(3)의 지수사상: Rodrigues 공식 so3-exp

회전군 SO(3)SO(3)의 항등원 I\mathbf{I}에서의 접공간은 3×33 \times 3 반대칭 행렬의 공간이고, 반대칭 행렬은 벡터 ω∈R3\boldsymbol{\omega} \in \mathbb{R}^3 하나로 정해진다.

ω^=[0−ω3ω2ω30−ω1−ω2ω10],ω^x=ω×x.\hat{\boldsymbol{\omega}} = \begin{bmatrix} 0 & -\omega_3 & \omega_2 \\ \omega_3 & 0 & -\omega_1 \\ -\omega_2 & \omega_1 & 0 \end{bmatrix}, \qquad \hat{\boldsymbol{\omega}}\mathbf{x} = \boldsymbol{\omega} \times \mathbf{x}.

지수사상 exp⁡(ω^)\exp(\hat{\boldsymbol{\omega}})는 축 ω/∥ω∥\boldsymbol{\omega}/\lVert\boldsymbol{\omega}\rVert 둘레로 각 θ=∥ω∥\theta = \lVert\boldsymbol{\omega}\rVert [rad]만큼 도는 회전이고, Rodrigues 공식으로 닫힌 형태로 계산된다.

exp⁡(ω^)=I+sin⁡θθω^+1−cos⁡θθ2ω^2.\exp(\hat{\boldsymbol{\omega}}) = \mathbf{I} + \frac{\sin\theta}{\theta}\hat{\boldsymbol{\omega}} + \frac{1 - \cos\theta}{\theta^2}\hat{\boldsymbol{\omega}}^2.

함수 so3_exp(omega)를 완성해 shape (3, 3)인 회전 행렬을 반환한다.

테스트는 다음을 확인한다.

  • scipy.linalg.expm(hat(omega))와 같다.
  • R⊤R=I\mathbf{R}^\top\mathbf{R} = \mathbf{I}, det⁡R=1\det\mathbf{R} = 1이다.
  • 회전축 ω\boldsymbol{\omega}는 고정된다: Rω=ω\mathbf{R}\boldsymbol{\omega} = \boldsymbol{\omega}.
  • ω=0\boldsymbol{\omega} = \mathbf{0}이면 I\mathbf{I}를 반환하고, ∥ω∥=10−12\lVert\boldsymbol{\omega}\rVert = 10^{-12}처럼 아주 작은 각에서도 NaN이 나오지 않는다.

힌트: θ→0\theta \to 0이면 sin⁡θ/θ→1\sin\theta/\theta \to 1, (1−cos⁡θ)/θ2→1/2(1-\cos\theta)/\theta^2 \to 1/2이다. 작은 각에서는 Taylor 전개의 첫 몇 항을 쓰거나, 아주 작은 θ\theta에서 0으로 나누지 않도록 분기한다. 본문의 셀은 ω\boldsymbol{\omega}를 정규화하므로 ω=0\boldsymbol{\omega} = \mathbf{0}에서 실패한다.

구면의 지수사상과 측지선 sphere-exp-map

단위구면 Sn−1={x∈Rn:∥x∥=1}S^{n-1} = \{\mathbf{x} \in \mathbb{R}^n : \lVert\mathbf{x}\rVert = 1\} 위의 점 p\mathbf{p}에서 접공간은 p\mathbf{p}에 수직인 벡터들의 집합 TpSn−1={v:p⊤v=0}T_{\mathbf{p}}S^{n-1} = \{\mathbf{v} : \mathbf{p}^\top\mathbf{v} = 0\}이다. 지수사상 exp⁡p(v)\exp_{\mathbf{p}}(\mathbf{v})는 p\mathbf{p}에서 v\mathbf{v} 방향으로 출발해 대원(great circle)을 따라 길이 ∥v∥\lVert\mathbf{v}\rVert만큼 간 점이다.

exp⁡p(v)=cos⁡(∥v∥) p+sin⁡(∥v∥) v∥v∥.\exp_{\mathbf{p}}(\mathbf{v}) = \cos(\lVert\mathbf{v}\rVert)\,\mathbf{p} + \sin(\lVert\mathbf{v}\rVert)\,\frac{\mathbf{v}}{\lVert\mathbf{v}\rVert}.

두 함수를 완성한다.

  1. tangent_project(p, x): 임의의 벡터 x\mathbf{x}를 p\mathbf{p}의 접공간으로 직교사영한다. x−(p⊤x)p\mathbf{x} - (\mathbf{p}^\top\mathbf{x})\mathbf{p}.
  2. sphere_exp(p, v): 위 식을 계산한다. 테스트는 이 함수를 채점 진입점으로 쓴다.

테스트는 다음을 확인한다.

  • 결과가 단위구면 위에 있다.
  • ∥v∥<π\lVert\mathbf{v}\rVert < \pi이면 p\mathbf{p}와 결과 사이의 측지 거리 arccos⁡(p⊤q)\arccos(\mathbf{p}^\top\mathbf{q})가 ∥v∥\lVert\mathbf{v}\rVert와 같다.
  • v=0\mathbf{v} = \mathbf{0}이면 p\mathbf{p}를 그대로 반환한다(NaN 없이).
  • 작은 v\mathbf{v}에서는 exp⁡p(v)≈p+v\exp_{\mathbf{p}}(\mathbf{v}) \approx \mathbf{p} + \mathbf{v}다. 지수사상의 1차 근사가 접벡터 자체다.
  • n=3n = 3뿐 아니라 임의의 차원 nn에서 동작한다.

힌트: 직선 보간 (1−t)p+tq(1-t)\mathbf{p} + t\mathbf{q}를 정규화하는 것은 같은 대원 위의 점을 주지만, 같은 속도로 움직이지 않는다. 테스트는 거리까지 확인한다.