모눈종이를 돌리거나, 뒤집거나, 한쪽으로 기울이거나, 늘여도 모눈의 선들은 여전히 곧고, 평행하고, 같은 간격이다. 그리고 원점은 제자리에 있다. 이런 변환이 선형변환이고, 모두 행렬 하나로 쓸 수 있다. 그래서 이미지 회전, 3D 그래픽스의 좌표 변환, 데이터의 차원 축소가 모두 행렬 곱이 된다. 다만 선형이라고 길이나 각을 지키는 것은 아니며(늘이기, 기울이기), 원점을 옮기는 평행이동은 선형이 아니다.
예시로 보기
평면의 네 가지 변환이 기준 벡터 \(\mathbf{e}_1 = (1, 0)\), \(\mathbf{e}_2 = (0, 1)\)을 어디로 보내는지 보면 행렬이 바로 나온다(열 = 기준 벡터의 도착점).
| 변환 | \(\mathbf{e}_1\) → | \(\mathbf{e}_2\) → | 행렬 |
|---|---|---|---|
| 각 \(\theta\)만큼 회전 | \((\cos\theta, \sin\theta)\) | \((-\sin\theta, \cos\theta)\) | \(\begin{pmatrix}\cos\theta & -\sin\theta\\ \sin\theta & \cos\theta\end{pmatrix}\) |
| \(x\)축에 대한 반사 | \((1, 0)\) | \((0, -1)\) | \(\begin{pmatrix}1 & 0\\ 0 & -1\end{pmatrix}\) |
| \(x\)축으로의 사영 | \((1, 0)\) | \((0, 0)\) | \(\begin{pmatrix}1 & 0\\ 0 & 0\end{pmatrix}\) |
| 가로 방향 전단 | \((1, 0)\) | \((k, 1)\) | \(\begin{pmatrix}1 & k\\ 0 & 1\end{pmatrix}\) |
회전의 두 열은 삼각함수의 정의 그대로다. \(\mathbf{e}_2\)는 \(\mathbf{e}_1\)보다 90° 앞서 있으므로 \((\cos(\theta + 90°), \sin(\theta + 90°)) = (-\sin\theta, \cos\theta)\)로 간다. 각 변환이 아래 정의의 \(T\), 표의 행렬이 \(A\)다.
연한 F가 변환 전, 파란 F와 기울어진 격자가 변환 뒤다. 주황·초록 화살표가 \(\mathbf{e}_1\), \(\mathbf{e}_2\)의 도착점, 곧 행렬의 두 열이다. 격자선은 어느 변환 뒤에도 곧고 평행하며 간격이 고르다1.
정의
함수 \(T: \mathbb{R}^n \to \mathbb{R}^m\)(\(\mathbb{R}\)은 실수 전체, \(\mathbb{R}^n\)은 실수 \(n\)개짜리 목록 전체)이 모든 벡터 \(\mathbf{u}, \mathbf{v}\)와 스칼라 \(c\)에 대해
\[T(\mathbf{u} + \mathbf{v}) = T(\mathbf{u}) + T(\mathbf{v}), \qquad T(c\mathbf{v}) = cT(\mathbf{v})\]를 만족하면 선형변환이다. \(T(\mathbf{v}) = \mathbf{0}\)인 \(\mathbf{v}\)의 집합을 핵, \(T\)의 값 전체를 상이라 한다2.
동치인 다른 정의.
- 두 조건을 합친 한 조건: \(T(c\mathbf{u} + d\mathbf{v}) = cT(\mathbf{u}) + dT(\mathbf{v})\).
- 행렬 꼴: 어떤 \(m \times n\) 행렬 \(A\)가 있어 \(T(\mathbf{x}) = A\mathbf{x}\). \(A\)의 \(j\)열은 \(T(\mathbf{e}_j)\)다(선형 함수는 행렬이다). 이때 핵은 \(N(A)\), 상은 \(C(A)\)다(네 부분공간).
기하적 성질. 선형변환은 원점을 원점으로 보내고(\(T(\mathbf{0}) = T(0\mathbf{v}) = 0\)), 직선을 직선(또는 한 점)으로, 평행선을 평행선으로 보내며, 같은 간격의 점들을 같은 간격으로 보낸다. 직선 \(\mathbf{p} + t\mathbf{d}\)의 상이 \(T(\mathbf{p}) + tT(\mathbf{d})\)이기 때문이다.
설계 이유. “덧셈과 스칼라배를 보존한다”는 조건 하나로 정의해 두면, 기저 벡터의 상만 알면 전부 정해지고, 합성이 행렬 곱이 된다. 계산과 이론이 모두 행렬로 옮겨 간다.
해당하는 예: 위의 회전·반사·사영·전단, 미분 연산 \(p(x) \mapsto p'(x)\)(다항식 공간 위의 선형변환, 추상 벡터공간). 해당하지 않는 예: 평행이동 \(\mathbf{x} \mapsto \mathbf{x} + \mathbf{b}\)(\(T(\mathbf{0}) \ne \mathbf{0}\)), \((x, y) \mapsto (x^2, y)\)(\(T(2\mathbf{e}_1) = (4, 0) \ne 2T(\mathbf{e}_1)\)).
증명
기하적 성질과 합성의 행렬을 보인다.
증명 펼치기
- 원점: \(T(\mathbf{0}) = T(0 \cdot \mathbf{0}) = 0 \cdot T(\mathbf{0}) = \mathbf{0}\).
- 직선: \(T(\mathbf{p} + t\mathbf{d}) = T(\mathbf{p}) + tT(\mathbf{d})\). \(T(\mathbf{d}) \ne \mathbf{0}\)이면 점 \(T(\mathbf{p})\)를 지나고 방향이 \(T(\mathbf{d})\)인 직선이고, \(T(\mathbf{d}) = \mathbf{0}\)이면 한 점이다. 방향이 같은 두 직선(평행선)은 상의 방향도 \(T(\mathbf{d})\)로 같아 평행하다.
- 같은 간격: 직선 위의 점 \(t = 0, 1, 2, \dots\)는 \(T(\mathbf{p}) + tT(\mathbf{d})\)로 가서 간격 \(T(\mathbf{d})\)로 고르게 놓인다.
- 합성: \(S(T(\mathbf{x})) = B(A\mathbf{x}) = (BA)\mathbf{x}\). 합성도 선형이고, 행렬은 곱 \(BA\)다. ∎
스스로 설명해 보기
1. 1단계에서 “\(\mathbf{0} = 0\cdot\mathbf{0}\)“을 쓰는 이유는?
스칼라배 조건 \(T(c\mathbf{v}) = cT(\mathbf{v})\)를 적용할 모양을 만들려고 한다. \(c = 0\)을 넣으면 우변이 영벡터가 되어 \(T(\mathbf{0}) = \mathbf{0}\)이 나온다.
2. 회전 행렬의 둘째 열이 \((-\sin\theta, \cos\theta)\)인 이유는?
\(\mathbf{e}_2\)는 각 90°의 단위벡터라 \(\theta\)만큼 돌리면 각 \(\theta + 90°\)인 단위벡터 \((\cos(\theta + 90°), \sin(\theta + 90°))\)가 된다. 삼각함수의 성질로 이것은 \((-\sin\theta, \cos\theta)\)다.
이 개념의 핵심 아이디어는?
두 가지 연산(덧셈, 스칼라배)을 보존하는 함수는 기저에서의 값만으로 정해진다. 무한히 많은 점의 움직임이 행렬의 몇 개 숫자로 요약된다.
같은 아이디어가 쓰이는 다른 상황은?
미분과 적분이 선형이라 미분 법칙의 “합의 미분 = 미분의 합”이 맞는다. 신호 처리의 선형 필터도 입력의 합에 대한 출력이 출력의 합이라는 성질로 설계한다.
예제
반사를 행렬로. 직선 \(y = x\)에 대한 반사.
- 기준 벡터의 상: \(\mathbf{e}_1 = (1, 0)\)은 \((0, 1)\)로, \(\mathbf{e}_2 = (0, 1)\)은 \((1, 0)\)으로 간다(좌표를 바꾼다).
- 행렬: \(A = \begin{pmatrix}0 & 1\\ 1 & 0\end{pmatrix}\).
- 확인: \((3, 1) \mapsto (1, 3)\). 직선 \(y = x\) 위의 \((2, 2)\)는 그대로다. 두 번 반사하면 \(A^2 = I\)로 제자리다.
활용
- 그래픽스. 스프라이트 회전, 창 크기에 맞춘 늘이기, 기울임 글꼴(전단)이 모두 \(2 \times 2\) 행렬이다. 여러 변환은 행렬을 미리 곱해 하나로 만든다.
- 이미지 처리. 이미지 회전은 각 출력 픽셀에 역변환 \(A^{-1}\)을 곱해 원본의 어느 위치를 읽을지 정하고 보간한다3.
- 데이터 사영. 3차원 점을 화면(평면)에 그리는 정사영, 고차원 데이터를 2차원으로 줄여 보는 것이 사영이다. 사영은 핵이 있어(정보를 잃어) 되돌릴 수 없다.
- 알고리즘에서: 구현과 시뮬레이션에서 \(n \times n\) 격자를 시계 방향으로 90도 돌리면 칸 \((r, c)\)가 \((c, n - 1 - r)\)로 가는데, 이는 회전 \((r, c) \mapsto (c, -r)\) 뒤에 둘째 좌표에 \(n - 1\)을 더하는 평행이동을 이은 것이다. 앞에서부터 더해 나가는 누적 합은 대각선과 그 아래가 모두 1인 행렬을 곱하는 선형변환이라, 구간 더하기 표시를 차분 배열 하나에 모두 모아 둔 뒤 한 번만 누적해도 표시마다 따로 누적해 더한 것과 같다. 블록 이동하기처럼 원점이 아닌 점 \(\mathbf{p}\)를 축으로 돌릴 때는 \(\mathbf{p}\)를 원점으로 옮기고, 회전 행렬을 곱하고, 다시 \(\mathbf{p}\)만큼 옮긴다.
- 브리지: 격자 회전 ↔ 선형변환
연결
- 선수: 행렬 곱셈과 전치, 부분공간, 기저와 차원, 삼각함수
- 회전의 세 얼굴: 덧셈정리 ↔ 복소수 곱 ↔ 회전 행렬
- 이어지는 개념: 기저 변환, 행렬식(넓이의 배율)
자주 하는 오해
틀렸다. 처음 보는 예가 회전·반사라 “도형을 그대로 옮기는 변환”으로 기억하기 쉽다. 하지만 선형은 “직선·평행·등간격·원점”만 지킨다. 늘이기 \(\operatorname{diag}(2, 1)\)은 원을 타원으로, 전단은 정사각형을 평행사변형으로 바꾸고, 사영은 평면을 직선으로 눌러 버린다. 길이와 각을 모두 지키는 것은 회전·반사 같은 직교 변환뿐이다(직교성).
확인 문제
C1 직선 \(y = x\)에 대한 반사를 행렬로 쓰라.
답: \(\begin{pmatrix}0 & 1\\ 1 & 0\end{pmatrix}\). \(\mathbf{e}_1 \mapsto (0, 1)\), \(\mathbf{e}_2 \mapsto (1, 0)\)을 열로 적는다.
C2 \((2, 1)\)을 원점을 중심으로 90° 돌리면 어디로 가는가?
답: \(R_{90°} = \begin{pmatrix}0 & -1\\ 1 & 0\end{pmatrix}\)이라 \((0 \cdot 2 - 1 \cdot 1,\ 1 \cdot 2 + 0 \cdot 1) = (-1, 2)\).
C3 \(T(x, y) = (x^2, y)\)가 선형이 아님을 보여라.
답: \(T(2, 0) = (4, 0)\)인데 \(2T(1, 0) = (2, 0)\)이라 스칼라배를 보존하지 않는다.
C4 선형변환이 직선을 직선(또는 점)으로 보내는 이유는?
답: 직선은 \(\mathbf{p} + t\mathbf{d}\)(\(t \in \mathbb{R}\))로 쓰고, 선형성으로 \(T(\mathbf{p} + t\mathbf{d}) = T(\mathbf{p}) + tT(\mathbf{d})\)다. 이것은 점 \(T(\mathbf{p})\)를 지나고 방향이 \(T(\mathbf{d})\)인 직선이다. \(T(\mathbf{d}) = \mathbf{0}\)이면 한 점으로 뭉개진다.
-
12_linear-transformations_plot.py로 그렸고, 네 행렬이 \(\mathbf{e}_1\), \(\mathbf{e}_2\)를 표대로 보내는 것을 같은 코드로 확인했다. ↩
-
Strang, Introduction to Linear Algebra 5판, 8.1절 “The Idea of a Linear Transformation”(선형성, 직선과 평행선, 핵과 상), 8.2절 “The Matrix of a Linear Transformation”(기저의 상으로 만든 행렬, 회전·사영·반사). ↩
-
정방향으로 픽셀을 보내면 빈 구멍이 생기기 때문이다. ↩