3. 선형 변환(Linear Transformation), 기저 변환(Change of Basis)

2022. 7. 26. 03:09Mathematics for CG

이전 글에서 선형 결합과 선형 독립, 기저에 대해 알아보았다.

이제 선형 변환(linear transformation)에 대해 알아보자.

 

변환(transformation)이란, $n$-차원의 공간을 $m$-차원의 공간으로 사상(mapping)하는 함수를 말하며,
다음과 같이 표기한다.

$$ T : \mathbb{R^n} \mapsto \mathbb{R^m} $$

예를 들어, 다음 함수 $f(x, y)$는 $\mathbb{R^2}$에서 $\mathbb{R}$으로 사상하는 함수이다.

$$ f(x, y) = x^2 + y^2 $$

 

$F$ 위의 벡터 공간 $V$에서 $W$로 사상하는 선형 변환 $T$는 다음 두 가지의 중요한 성질을 만족한다.

  • $ T(v_0 + v_1) = T(v_0) + T(v_1)  \;\; ( \; v_0, v_1 \in V \; ) $
  • $ T(av) = aT(v) \;\; ( \; v \in V, a \in F \; ) $

 

따라서 어떤 변환 $T$가 선형 변환인지 확인하기 위해서는 다음 식을 만족하는지 확인해보면 된다.

$$ T(ax + y) = aT(x) + T(y) $$

 

예를 들어, $T(x) = kx$는 선형 변환이다.

$$ T(ax + y) = k(ax + y) = akx + ky = aT(x) + T(y)$$

하지만, $T(x) = k_0x + k_1$는 선형 변환이 아니다.

$$ T(ax + y) = k_0(ax + y) + k_1 = ak_0x + (k_0y + k_1) = ak_0x + T(y) \\ \neq aT(x) + T(y) $$

 

이제 선형 결합으로 생성된 어떤 벡터 $v$에 선형 변환을 적용해보자.

$$ T(v) = T(x_0v_0 + x_1v_1 + ··· + x_{n-1}v_{n-1}) $$

선형 변환은 $T(ax + y) = aT(x) + T(y)$ 방정식을 만족시키므로 위 선형 결합에 적용된 선형 변환을
다음과 같이 다시 쓸 수 있다.

$$ T(v) = x_0T(v_0) + x_1T(v_1) + ··· + x_{n-1}T(v_{n-1}) $$

이 식은 변환된 벡터 $T(v)$가 변환된 기저들 $T(v_0), ..., T(v_{n-1})$의 선형 결합으로 나타낼 수 있다는 것을 보여준다.

 

선형 변환 $T$는 벡터 공간 $V$에서 $W$로 사상하므로 변환된 기저 벡터 $T(v_i)$는 $W$의 기저들 $w_0, ..., w_{n-1}$의 선형 결합으로 나타낼 수 있을 것이다.

$$ T(v_i) = a_{0,i}w_0 + a_{1,i}w_1 + ··· + a_{m-1,i}w_{m-1} $$

 

위 식을 $T(v)$를 구하는 식에 대입해보자.

$$ T(v) = x_0(a_{0,0}w_0+···+a_{m-1,0}w_{m-1}) \\ + x_1(a_{0,1}w_0+···+a_{m-1,1}w_{m-1})  \\ + x_2(a_{0,2}w_0+···+a_{m-1,2}w_{m-1})  \\  ···  \\ + x_{n-1}(a_{0,m-1}w_0+···+a_{m-1,m-1}w_{m-1})$$

 

위 식을 기저 $w$ 중심으로 전개하면 다음과 같다.

$$ T(v) = (x_0a_{0,0}+···+x_{n-1}a_{0,n-1})*w_0 \\ + (x_0a_{1,0} + ··· + x_{n-1}a_{1,n-1})*w_1 \\ + (x_0a_{2,0} + ··· + x_{n-1}a_{2,n-1})*w_2 \\  ··· \\ + (x_0a_{m-1,0} + ··· + x_{n-1}a_{m-1,n-1})*w_{m-1} $$

 

$b_i$를 다음과 같이 정의하면,

$$ b_i = x_0a_{i,0} + x_1a_{i,1} + ··· + x_{n-1}a_{i,n-1} $$

 

이제 $T(v)$를 다음과 같이 쓸 수 있다.

$$ T(v) = b_0w_0 + b_1w_1 + ··· + b_{m-1}w_{m-1} $$

즉, 기저 $w_i$의 선형 결합 계수 $b_i$만 찾아내면 벡터를 선형 변환한 결과를 얻을 수 있다.

 

선형 변환의 장점은 선형 변환을 행렬로 표현할 수 있다는 것이다. 행렬 표현의 장점은 행렬로 표현된 여러 변환을 합성하여 하나의 행렬로 나타낼 수 있으며, 행렬은 GPU에 의해 빠르게 계산될 수 있다.

 

이제 선형 변환을 행렬로 나타내보자.

행렬 $M$의 열벡터를 보면 벡터 공간 $W$에서의 $T(v_i)$의 선형 결합 계수인 것을 알 수 있다.

즉, 벡터 공간 $V$의 기저($v_i$)들이 선형 변환을 통해 벡터 공간 $W$에서 어디에 사상되는지 알 수 있으면 행렬 $M$을 만들 수 있고, 행렬 $M$과 벡터 공간 $V$에 있는 벡터 $x$를 곱하면 벡터 공간 $W$에서 벡터 $x$가 어디에 사상되는지 알 수 있다.

 

대표적인 선형 변환 중 하나인 $\mathbb{R^3}$ 벡터 공간에서의 크기 변환을 예로 들어보자.

 

크기 변환은 각 축으로 $s_x, s_y, s_z$ 만큼 크기를 곱하는 변환으로, 같은 벡터 공간으로 사상하는 선형 변환
($\mathbb{R^3} \mapsto \mathbb{R^3}$)이다. (같은 벡터 공간으로 사상하는 선형 변환을 linear operator라 한다.)

$$ T(v) = ( s_xv_x,\; s_yv_y,\; s_zv_z ) = s_xv_x + s_yv_y + s_zv_z $$

이 함수를 통해 표준 기저 벡터 $i = (1, 0, 0), j = (0, 1, 0), k = (0, 0, 1)$는 다음과 같이 변환된다.

$$ T(i) = (s_x, 0, 0) = s_xi + 0j + 0k \\ T(j) = (0, s_y, 0) = 0i + s_yj + 0k \\ T(k) = (0, 0, s_z) = 0i + 0j + s_zk $$

변환된 기저들의 선형 결합 계수들을 열벡터로 만들어서 행렬 $M$을 만들면 다음과 같다.

이제 이 행렬을 통해 모든 $\mathbb{R^3}$의 벡터를 변환할 수 있다.

 

마지막으로 기저 변환(change of basis)에 대해 알아보자.

 

기저 변환은 어떤 기저 $v$에 대해 표현된 좌표들을 다른 기저 $w$에 대해 표현된 좌표들로 변환하는 작업을 말하는데, 컴퓨터 그래픽스에서는 월드 $\rightarrow$ 카메라 좌표계 변환과 같이 한 좌표계의 좌표들을 다른 좌표계로 표현하는 일이 흔하기 때문에 매우 중요한 개념이라 할 수 있다.

 

두 기저 $\{v_0, v_1, ..., v_{n-1}\}$와 $\{u_0, u_1, ..., u_{n-1}\}$와 벡터 $v = x_0v_0 + x_1v_1 + ··· + x_{n-1}v_{n-1}$가 있다고 해보자. 우리가 알고 싶은 것은 기저 $v_i$에 대한 좌표 $(x_0, x_1, ..., x_{n-1})$를 기저 $u_i$에 대한 좌표로 변환하는 행렬 $M$이다.

행렬 $M$을 구하는 과정은 선형 변환을 행렬로 변환하는 과정과 다르지 않은데, 기저 변환은 선형 변환이기 때문이다.

 

선형 변환은 변환된 기저 벡터들이 어느 좌표에 놓일지만 알면 나머지 벡터들이 놓일 좌표를 알 수 있다고 했다. 따라서 기저 $v_i$를 기저 $u_i$로 나타내보자.

$$ v_i = a_{0,i}u_0 + a_{1,i}u_1 + ··· + a_{n-1,i}u_{n-1} $$

벡터 $v = x_0v_0 + x_1v_1 + ··· + x_{n-1}v_{n-1}$에 위에서 구한 $v_i$를 치환한다.

이제 벡터 $v$를 다음과 같이 벡터와 행렬의 곱으로 나타낼 수 있으며,

기저 $v_i$에 대한 좌표에서 $u_i$에 대한 좌표로 변환하는 기저 변환 행렬 $M$도 알 수 있다.

예로, 벡터 $v = 2 * (1, 0) + 3 * (1, 2)$를 기저 변환을 통해 표준 기저 벡터로 나타내보자.

 

먼저, 변환 전의 기저 $(1, 0), (1, 2)$를 표준 기저 벡터 $(1, 0), (0, 1)$로 나타낸다.

$$ (1, 0) = 1 * (1, 0) + 0 * (0, 1) \\ (1, 2) = 1 * (1, 0) + 2 * (0, 1) $$

각 선형 결합의 계수들을 행렬의 열벡터로 나타낸다.

$(2, 3)$을 행렬 $M$에 곱하면 표준 기저 벡터에서의 좌표를 얻을 수 있다.

 

기저 변환을 통해 변환된 기저들은 여전히 선형 독립을 유지한다. 하지만, 모든 선형 변환이 선형 독립을 유지 시키지는 않기 때문에 기저 변환이 아닌 선형 변환도 있다. 즉, 기저 변환은 선형 변환이지만 모든 선형 변환이 기저 변환인 것은 아니다.

 

또한, 역행렬이 없을 수 있는 선형 변환과는 다르게 기저 변환은 선형 독립을 유지하기 때문에 항상 역행렬이 존재하며, 이 말은 어떤 벡터에 적용한 기저 변환을 되돌릴 수 있다는 뜻이다.

바로 위 예제에서 구한 행렬 $M$의 역행렬을 구해보자.

좌표 $(5, 6)$은 기저 변환 행렬 $M$에 $(2, 3)$을 곱해서 나온 결과였다.

이제 $(5, 6)$에 역행렬 $M^{-1}$을 곱해보면 기저 변환 전 좌표 $(2, 3)$이 나오는 것을 확인할 수 있다.

 

다음 글에서는 점(Point)과 아핀 공간(Affine Space)에 대해 알아보겠다.