1 챕터 4 전체 로드맵
Ch.3까지의 여정을 돌아보면 다음과 같다.
- Ch.1: 개별 벡터 — 덧셈, 스칼라 곱, 내적
- Ch.2: 연립방정식 — \(Ax = b\) 를 소거법으로 풀기, LU 분해
- Ch.3: 벡터 공간 — 해의 집합 전체를 부분공간으로 이해하기 (네 부분공간, 차원 관계)
- Ch.4: 직교성 — 부분공간들 사이의 “각도” — 90도라는 기하학적 관계
Ch.3는 “어느 공간에 속하는가?”를 물었고, Ch.4는 “두 공간이 서로 수직인가?”를 묻는다. 이 질문은 단순히 기하학적 우아함을 위한 것이 아니라, 해가 없는 \(Ax = b\) 에서 최선의 근사해를 구하는 최소제곱법(least squares)으로 곧장 이어진다.
| 절 | 제목 | 핵심 질문 |
|---|---|---|
| §4.1 | Orthogonality of the Four Subspaces | 네 부분공간은 어떻게 수직인가? |
| §4.2 | Projections | 한 벡터를 부분공간에 가장 가깝게 투영하면? |
| §4.3 | Least Squares Approximations | 해가 없을 때 오차를 최소화하는 해는? |
| §4.4 | Orthogonal Bases and Gram-Schmidt | 임의의 기저를 직교 기저로 변환하려면? |
이 Overview는 §4.1에 집중한다. §4.2~§4.4는 각각 별도 포스트에서 깊이 있게 다룬다.
2 왜 직교성인가
2.1 직교성 없이 풀 수 없는 문제
데이터 사이언스와 공학에서는 방정식의 개수 \(m\) 이 미지수의 개수 \(n\) 보다 훨씬 많은 상황이 흔하다. 예를 들어 1,000개의 측정값으로 10개의 파라미터를 추정하면 \(m = 1000, n = 10\) 이다. 이때 \(Ax = b\) 는 해가 없다 — \(b\) 가 \(A\) 의 열공간 \(C(A)\) 밖에 있기 때문이다.
“해가 없는 문제에서 최선의 답을 찾아라”
이것이 최소제곱법(least squares)이다. 그리고 최소제곱법을 이해하려면 직교성이 반드시 필요하다. “최선의 근사해”는 잔차 벡터 \(b - A\hat{x}\) 가 열공간 \(C(A)\) 에 수직인 지점에서 정의되기 때문이다.
2.2 직관: 그림자(정사영)와 오차
\(b\) 를 \(C(A)\) 에 투영한 결과 \(p\) 는 \(b\) 에서 \(C(A)\) 까지의 수선의 발이다. 오차 \(e = b - p\) 는 \(C(A)\) 와 수직 방향 — 즉 \(C(A)^\perp\) 에 속한다.
\[b = p + e, \quad p \in C(A), \quad e \perp C(A)\]
이 분해가 가능한 이유가 바로 §4.1에서 증명하는 직교 보공간(orthogonal complement)이다.
3 직교 벡터 (Orthogonal Vectors)
3.1 정의
\(\mathbb{R}^n\) 의 두 벡터 \(\mathbf{v}\) 와 \(\mathbf{w}\) 는 내적이 0일 때 직교한다(orthogonal).
\[\mathbf{v}^\top \mathbf{w} = v_1 w_1 + v_2 w_2 + \cdots + v_n w_n = 0\]
표기: \(\mathbf{v} \perp \mathbf{w}\)
내적이 0이라는 조건은 기하학적으로 두 벡터가 이루는 각도 \(\theta = 90°\) 를 의미한다. 코사인 공식 \(\mathbf{v}^\top \mathbf{w} = \|\mathbf{v}\| \|\mathbf{w}\| \cos\theta\) 에서 \(\cos 90° = 0\) 이기 때문이다.
3.2 피타고라스 정리와의 연결
직교하는 두 벡터는 피타고라스 정리를 만족한다.
\[\mathbf{v} \perp \mathbf{w} \iff \|\mathbf{v}\|^2 + \|\mathbf{w}\|^2 = \|\mathbf{v} + \mathbf{w}\|^2\]
직관: \(\|\mathbf{v} + \mathbf{w}\|^2 = (\mathbf{v}+\mathbf{w})^\top(\mathbf{v}+\mathbf{w}) = \|\mathbf{v}\|^2 + 2\mathbf{v}^\top\mathbf{w} + \|\mathbf{w}\|^2\) 이므로, 교차항 \(2\mathbf{v}^\top\mathbf{w} = 0\) 이 남아야 피타고라스가 성립한다. 내적 = 0 이라는 대수 조건과 피타고라스 정리라는 기하 조건은 완전히 동치이다.
예시
\[\mathbf{v} = \begin{bmatrix} 1 \\ 2 \end{bmatrix},\quad \mathbf{w} = \begin{bmatrix} -2 \\ 1 \end{bmatrix} \implies \mathbf{v}^\top \mathbf{w} = (1)(-2) + (2)(1) = 0\]
\[\mathbf{v} = \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix},\quad \mathbf{w} = \begin{bmatrix} 1 \\ -2 \\ 1 \end{bmatrix} \implies \mathbf{v}^\top \mathbf{w} = 1 - 2 + 1 = 0\]
3.3 영벡터의 특별한 지위
영벡터 \(\mathbf{0}\) 은 모든 벡터와 내적하면 0이므로 모든 벡터와 직교한다. 이것은 예외적이라기보다, 직교의 정의가 내적에 의존하기 때문에 자연스럽게 따라오는 결론이다.
3.4 직교 벡터 → 선형 독립
직교 벡터 집합 \(\{\mathbf{v}_1, \mathbf{v}_2, \ldots, \mathbf{v}_k\}\) 에서 모든 벡터가 영이 아니면 이 집합은 선형 독립이다.
증명의 핵심: \(c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \cdots + c_k\mathbf{v}_k = \mathbf{0}\) 이라 하자. 양변에 \(\mathbf{v}_i^\top\) 을 곱하면 \(c_i \|\mathbf{v}_i\|^2 = 0\) 이므로 \(c_i = 0\) 이다. 이것이 모든 \(i\) 에 대해 성립하므로 선형 독립이다.
직관: 직교 벡터들은 서로 다른 “방향”을 가리키므로 어느 하나를 나머지의 선형결합으로 표현할 수 없다.
import numpy as np
import matplotlib.pyplot as plt
# 2D 직교 벡터 시각화
v = np.array([1, 2])
w = np.array([-2, 1])
print(f"v · w = {np.dot(v, w)}") # 0 — 직교 확인
print(f"||v||² + ||w||² = {np.dot(v,v) + np.dot(w,w)}")
print(f"||v+w||² = {np.dot(v+w, v+w)}") # 피타고라스 확인
fig, ax = plt.subplots(figsize=(5, 5))
ax.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1,
color='steelblue', label=r'$\mathbf{v}=[1,2]$')
ax.quiver(0, 0, w[0], w[1], angles='xy', scale_units='xy', scale=1,
color='coral', label=r'$\mathbf{w}=[-2,1]$')
# 직각 마크
ax.annotate('', xy=(0.3, -0.4), xytext=(0.5, 0),
arrowprops=dict(arrowstyle='-', color='gray'))
ax.set_xlim(-3, 3); ax.set_ylim(-1, 3)
ax.axhline(0, color='k', linewidth=0.5)
ax.axvline(0, color='k', linewidth=0.5)
ax.set_aspect('equal'); ax.legend()
ax.set_title(r'$\mathbf{v} \perp \mathbf{w}$ — 내적 = 0, 사잇각 = 90°')
ax.grid(True); plt.tight_layout(); plt.show()4 직교 부분공간 (Orthogonal Subspaces)
4.1 정의
두 벡터가 수직이라는 개념을 집합 전체로 확장한다.
벡터 공간의 두 부분공간 \(V\) 와 \(W\) 는 \(V\) 의 모든 벡터 \(\mathbf{v}\) 가 \(W\) 의 모든 벡터 \(\mathbf{w}\) 와 직교할 때 직교한다고 하며, \(V \perp W\) 로 표기한다.
\[V \perp W \iff \mathbf{v}^\top \mathbf{w} = 0 \quad \forall\, \mathbf{v} \in V,\; \forall\, \mathbf{w} \in W\]
4.2 직관: “모든 쌍이 수직”
단순히 “어느 방향으로는 수직”이 아니라, 두 공간에서 임의로 하나씩 벡터를 꺼내도 반드시 수직이어야 한다. 이 조건은 실제로 매우 강한 조건이다.
4.3 중요한 반례: 벽과 바닥은 직교 부분공간이 아니다
교실의 바닥(평면)과 벽(평면)은 언뜻 “수직”처럼 보인다. 그러나 바닥과 벽이 만나는 모서리 선 위의 벡터는 바닥 안에도, 벽 안에도 있다. 이 벡터는 자기 자신과의 내적 \(\mathbf{v}^\top\mathbf{v} = \|\mathbf{v}\|^2 > 0\) 이므로 수직이 아니다.
두 부분공간이 직교하려면 오직 영벡터에서만 만나야 한다: \(V \cap W = \{\mathbf{0}\}\)
이것은 역방향 조건이 아닌 필요 조건이다. 교차점이 영벡터뿐이어야 직교가 가능하다.
더 나아가, \(\dim V + \dim W > \dim\)(전체 공간)이면 두 공간은 결코 직교할 수 없다. 두 공간의 차원 합이 전체 공간을 넘으면 비자명 교차점이 반드시 존재하기 때문이다 (Strang, 2009, Ch.4).
# 직교 부분공간 확인 예시
# V = span{[1,0,0], [0,1,0]} (xy 평면)
# W = span{[0,0,1]} (z 축)
# V와 W는 직교 부분공간
v1 = np.array([1, 0, 0])
v2 = np.array([0, 1, 0])
w = np.array([0, 0, 1])
print("V의 기저:")
print(f" v1·w = {np.dot(v1, w)}") # 0
print(f" v2·w = {np.dot(v2, w)}") # 0
print("→ xy 평면과 z 축은 직교 부분공간")
# 반례: 두 평면 (벽과 바닥)
u1 = np.array([1, 0, 0]) # 바닥의 한 벡터
u2 = np.array([0, 0, 1]) # 공유 모서리 방향 벡터 (둘 다 포함)
print(f"\n공유 모서리 벡터 u2와 자기 내적: {np.dot(u2, u2)}") # 1 ≠ 0
print("→ 벽과 바닥은 직교 부분공간이 아님")5 행렬의 네 부분공간과 직교성
5.1 두 쌍의 직교 관계
\(m \times n\) 행렬 \(\mathbf{A}\) 의 네 부분공간은 다음 두 쌍의 직교 관계를 갖는다.
| 직교 쌍 | 공간 | 공간 |
|---|---|---|
| 쌍 1 | 행공간 \(C(\mathbf{A}^\top) \subset \mathbb{R}^n\) | 영공간 \(N(\mathbf{A}) \subset \mathbb{R}^n\) |
| 쌍 2 | 열공간 \(C(\mathbf{A}) \subset \mathbb{R}^m\) | 좌영공간 \(N(\mathbf{A}^\top) \subset \mathbb{R}^m\) |
5.2 증명: 행공간 \(\perp\) 영공간
증명: \(\mathbf{x} \in N(\mathbf{A})\) 이면 \(\mathbf{A}\mathbf{x} = \mathbf{0}\) 이다. 이것을 성분 단위로 쓰면 \(\mathbf{A}\) 의 각 행 \(\mathbf{a}_i^\top\) 과 \(\mathbf{x}\) 의 내적이 0이다.
\[\mathbf{A}\mathbf{x} = \begin{bmatrix} \mathbf{a}_1^\top \\ \mathbf{a}_2^\top \\ \vdots \\ \mathbf{a}_m^\top \end{bmatrix} \mathbf{x} = \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 0 \end{bmatrix}\]
직관: \(Ax = 0\) 이라는 식 자체가 ” \(A\) 의 모든 행이 \(x\) 와 직교한다”는 의미이다. 각 행과 \(\mathbf{x}\) 의 내적이 0이므로, 행들의 임의의 선형결합 — 즉 행공간의 모든 벡터 — 도 \(\mathbf{x}\) 와 직교한다.
따라서 \(N(\mathbf{A}) \perp C(\mathbf{A}^\top)\) 이다. \(\square\)
행렬 단축 증명: 행공간의 임의 벡터를 \(\mathbf{A}^\top \mathbf{y}\) 로 쓸 수 있다. \(\mathbf{x} \in N(\mathbf{A})\) 이면
\[\mathbf{x}^\top (\mathbf{A}^\top \mathbf{y}) = (\mathbf{A}\mathbf{x})^\top \mathbf{y} = \mathbf{0}^\top \mathbf{y} = 0\]
전치를 이용해 \(A\) 와 \(A^\top\) 을 자유롭게 이동시키는 것이 핵심 트릭이다.
5.3 왜 쌍 2도 성립하는가
\(A^\top\) 에 동일한 논리를 적용하면 된다. \(A^\top\) 의 영공간은 \(N(A^\top)\) (좌영공간)이고, \(A^\top\) 의 행공간은 \(C(A)\) (열공간)이다. 따라서 \(N(\mathbf{A}^\top) \perp C(\mathbf{A})\) 이다.
예시
\[\mathbf{A} = \begin{bmatrix} 1 & 3 & 4 \\ 5 & 2 & 7 \end{bmatrix}, \quad \mathbf{x} = \begin{bmatrix} 1 \\ 1 \\ -1 \end{bmatrix}\]
\(\mathbf{A}\mathbf{x} = \begin{bmatrix} 1+3-4 \\ 5+2-7 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}\) 이므로 \(\mathbf{x} \in N(\mathbf{A})\) 이고,
행 1 과의 내적: \(1 \cdot 1 + 3 \cdot 1 + 4 \cdot (-1) = 0\) ✓ 행 2 와의 내적: \(5 \cdot 1 + 2 \cdot 1 + 7 \cdot (-1) = 0\) ✓
A = np.array([[1, 3, 4],
[5, 2, 7]])
x = np.array([1, 1, -1])
print("Ax =", A @ x) # [0, 0] — 영공간 확인
print("행 1 · x =", A[0] @ x) # 0 — 직교 확인
print("행 2 · x =", A[1] @ x) # 0 — 직교 확인6 직교 보공간 (Orthogonal Complement)
6.1 정의
벡터 공간 \(W\) 내 부분공간 \(V\) 의 직교 보공간 \(V^\perp\) 은 \(V\) 의 모든 벡터와 직교하는 모든 벡터의 집합이다.
\[V^\perp = \{ \mathbf{w} \in W \mid \mathbf{v}^\top \mathbf{w} = 0 \quad \forall\, \mathbf{v} \in V \}\]
6.2 직교 vs. 직교 보공간 — 무엇이 다른가
“직교”와 “직교 보공간”은 비슷해 보이지만 크기(차원) 조건이 다르다.
| 개념 | 조건 |
|---|---|
| 직교 부분공간 | \(V\) 의 모든 벡터 \(\perp\) \(W\) 의 모든 벡터 |
| 직교 보공간 | 위 조건 + \(\dim V + \dim V^\perp = \dim(\text{전체 공간})\) |
즉, 직교 보공간은 “수직인 모든 것을 빠짐없이 모은 가장 큰 직교 부분공간”이다.
직관: \(\mathbb{R}^3\) 에서 한 직선 \(V\) 에 수직인 벡터들의 집합은 평면이다. 이 평면이 \(V^\perp\) 이며, \(\dim V + \dim V^\perp = 1 + 2 = 3 = \dim \mathbb{R}^3\) 이 성립한다.
6.3 선형대수 기본정리 Part 2
\(m \times n\) 행렬 \(\mathbf{A}\) 에 대해:
\[N(\mathbf{A})^\perp = C(\mathbf{A}^\top) \quad \text{(in } \mathbb{R}^n \text{)}\] \[N(\mathbf{A}^\top)^\perp = C(\mathbf{A}) \quad \text{(in } \mathbb{R}^m \text{)}\]
동치로 쓰면:
\[\mathbb{R}^n = C(\mathbf{A}^\top) \oplus N(\mathbf{A}), \qquad \mathbb{R}^m = C(\mathbf{A}) \oplus N(\mathbf{A}^\top)\]
여기서 \(\oplus\) 는 직합(direct sum) — 두 공간이 전체 공간을 빠짐없이, 겹치지 않게 채운다.
차원 관계: \(r + (n - r) = n\) 과 \(r + (m - r) = m\) 이 각각 성립한다.
Part 1 (Ch.3)은 차원을 알려주었다. Part 2는 방향(90도 관계)을 알려준다.
직관: 행렬이 하는 일의 완전한 그림
임의의 \(\mathbf{x} \in \mathbb{R}^n\) 을 두 성분으로 분해한다.
\[\mathbf{x} = \mathbf{x}_r + \mathbf{x}_n, \quad \mathbf{x}_r \in C(\mathbf{A}^\top), \quad \mathbf{x}_n \in N(\mathbf{A})\]
\(\mathbf{A}\) 를 곱하면:
- 영공간 성분은 사라진다: \(\mathbf{A}\mathbf{x}_n = \mathbf{0}\)
- 행공간 성분만 열공간으로 간다: \(\mathbf{A}\mathbf{x}_r \in C(\mathbf{A})\)
따라서 행공간에서 열공간으로의 변환은 일대일(bijective)이다. 행공간 안에 숨겨진 \(r \times r\) 가역 행렬이 존재하며, 이것이 유사역행렬(pseudoinverse)의 기초가 된다.
# 직교 보공간 계산 예시
# V = span{[1,0,0], [0,1,1]} 의 V⊥ 구하기
# V의 기저를 행으로 갖는 행렬의 영공간 = V⊥
B = np.array([[1, 0, 0],
[0, 1, 1]], dtype=float)
v1 = np.array([1, 0, 0])
v2 = np.array([0, 1, 1])
# Bx = 0의 해: x=0, y=-z → v_perp = [0,-1,1]
v_perp = np.array([0, -1, 1])
print(f"v_perp · v1 = {np.dot(v_perp, v1)}") # 0
print(f"v_perp · v2 = {np.dot(v_perp, v2)}") # 0
print("V⊥ = span{[0,-1,1]} 확인 완료")
print(f"dim(V) + dim(V⊥) = 2 + 1 = {3} = dim(R^3) ✓")
# 행렬 예시: A의 기본 부분공간 직교성 수치 확인
A = np.array([[1, 2],
[3, 6]], dtype=float)
# 영공간 기저: x = (-2, 1)
x_null = np.array([-2, 1])
print(f"\nAx_null = {A @ x_null}") # [0, 0]
# 행공간 기저: (1, 2)
x_row = np.array([1, 2])
print(f"행공간 벡터 · 영공간 벡터 = {np.dot(x_row, x_null)}") # 0 — 직교 확인7 벡터 분해: 행공간 성분 + 영공간 성분
7.1 분해 공식
모든 \(\mathbf{x} \in \mathbb{R}^n\) 은 유일하게 행공간 성분과 영공간 성분으로 분해된다.
\[\mathbf{x} = \mathbf{x}_r + \mathbf{x}_n, \quad \mathbf{x}_r \in C(\mathbf{A}^\top), \quad \mathbf{x}_n \in N(\mathbf{A}), \quad \mathbf{x}_r \perp \mathbf{x}_n\]
직관: 어느 벡터도 “행공간 방향”과 “영공간 방향”으로 유일하게 쪼갤 수 있다. 마치 \(\mathbb{R}^2\) 의 임의 벡터를 \(x\) 축 성분과 \(y\) 축 성분으로 분해하는 것처럼.
7.2 예시
\[\mathbf{A} = \begin{bmatrix} 1 & 2 \\ 3 & 6 \end{bmatrix}, \quad \mathbf{x} = \begin{bmatrix} 4 \\ 3 \end{bmatrix}\]
- 행공간 기저: \(\mathbf{r} = (1, 2)\) (유일한 피벗 행 방향)
- 영공간 기저: \(\mathbf{n} = (-2, 1)\) (특수해)
\(\mathbf{x} = c_r \mathbf{r} + c_n \mathbf{n}\) 으로 쓰면 \(c_r = 2, c_n = 1\) 을 구할 수 있고:
\[\mathbf{x}_r = 2 \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} 2 \\ 4 \end{bmatrix}, \quad \mathbf{x}_n = 1 \begin{bmatrix} -2 \\ 1 \end{bmatrix} = \begin{bmatrix} -2 \\ 1 \end{bmatrix}\]
확인: \(\mathbf{x}_r + \mathbf{x}_n = (2-2, 4+1)^\top\) … 잠깐, \(x = (4, 3)\) 인데 \((2,4)+(-2,1)=(0,5)\) 가 아닌가?
실제로 \(\mathbf{A}\) 의 행공간과 영공간을 정확히 계산하면:
- \(N(\mathbf{A})\): \(\mathbf{A}\mathbf{x} = \mathbf{0} \Rightarrow x_1 + 2x_2 = 0 \Rightarrow \mathbf{n} = (-2,1)^\top / \sqrt{5}\) (정규화)
- \(C(\mathbf{A}^\top)\): 행공간 기저 \((1,2)^\top / \sqrt{5}\)
\(\mathbf{x} = (4,3)^\top\) 의 행공간 성분:
\[\mathbf{x}_r = \frac{\mathbf{x}^\top \mathbf{r}}{\|\mathbf{r}\|^2} \mathbf{r} = \frac{4+6}{5} \begin{bmatrix} 1 \\ 2 \end{bmatrix} = 2\begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} 2 \\ 4 \end{bmatrix}\]
\[\mathbf{x}_n = \mathbf{x} - \mathbf{x}_r = \begin{bmatrix} 2 \\ -1 \end{bmatrix}\]
확인: \(\mathbf{x}_r + \mathbf{x}_n = (4,3)^\top\) ✓, \(\mathbf{x}_r \perp \mathbf{x}_n\): \(2 \cdot 2 + 4 \cdot (-1) = 0\) ✓
A = np.array([[1, 2],
[3, 6]], dtype=float)
x = np.array([4, 3], dtype=float)
# 행공간 기저 벡터 (정규화)
r = np.array([1, 2], dtype=float)
r_unit = r / np.linalg.norm(r)
# 행공간 투영 (나중에 §4.2에서 상세히 다룸)
x_r = (x @ r / (r @ r)) * r
x_n = x - x_r
print(f"x_r (행공간 성분) = {x_r}") # [2. 4.]
print(f"x_n (영공간 성분) = {x_n}") # [2. -1.]
print(f"x_r + x_n = {x_r + x_n}") # [4. 3.] ✓
print(f"직교 확인 x_r · x_n = {x_r @ x_n:.6f}") # 0 ✓
print(f"Ax_n = {A @ x_n}") # [0. 0.] ✓
print(f"Ax_r = {A @ x_r}") # Ax ✓
print(f"Ax = {A @ x}")8 왜 필요한가 (Why It Matters)
8.1 최소제곱법의 기하학적 토대
\(Ax = b\) 에 해가 없을 때, 최선의 근사해 \(\hat{\mathbf{x}}\) 는 잔차 \(\mathbf{e} = b - A\hat{\mathbf{x}}\) 가 \(C(\mathbf{A})\) 에 수직인 지점에서 결정된다.
\[\mathbf{e} \perp C(\mathbf{A}) \iff \mathbf{e} \in N(\mathbf{A}^\top) \iff \mathbf{A}^\top \mathbf{e} = \mathbf{0}\]
이 조건이 정규방정식 \(\mathbf{A}^\top \mathbf{A} \hat{\mathbf{x}} = \mathbf{A}^\top \mathbf{b}\) 으로 이어진다.
“직교성 없이는 최소제곱법을 정의할 수 없다.”
8.2 주성분 분석(PCA)의 기반
PCA는 데이터의 분산을 최대화하는 방향을 찾는다. 이때 주성분 벡터들이 서로 직교해야 한다 — 직교 기저가 없으면 성분들이 정보를 중복하여 담는다.
8.3 행렬의 숨겨진 구조
행렬 \(\mathbf{A}\) 는 두 쌍의 직교 공간을 만들어내며, 행공간에서 열공간으로의 변환만이 가역이다. 유사역행렬 \(\mathbf{A}^+\) 는 이 가역 부분만을 역으로 되돌린다.
9 응용 분야
| 분야 | 활용 | 직교성의 역할 |
|---|---|---|
| 통계 | 최소제곱 회귀 | 잔차 \(\perp\) 예측값 (잔차의 직교 분해) |
| 머신러닝 | 주성분 분석 (PCA) | 주성분 벡터들의 상호 직교성 |
| 신호처리 | 푸리에 변환 | sin/cos 기저 함수의 직교성 |
| 수치해석 | QR 분해 | 직교 기저로 연립방정식 안정적 풀이 |
| 딥러닝 | Attention 가중치 | Query-Key 내적 → 방향 유사도 측정 |
10 예시: 직교 보공간 완전 계산
\(\mathbb{R}^3\) 에서 평면 \(P: x - 3y - 4z = 0\) 이 주어졌을 때:
단계 1: \(P\) 를 \(N(\mathbf{A})\) 로 표현한다. \(\mathbf{A} = \begin{bmatrix} 1 & -3 & -4 \end{bmatrix}\)
단계 2: \(N(\mathbf{A})\) 의 기저를 구한다.
자유변수 \(y = 1, z = 0\): \(x = 3y + 4z = 3\) → \(\mathbf{s}_1 = (3, 1, 0)^\top\) 자유변수 \(y = 0, z = 1\): \(x = 3y + 4z = 4\) → \(\mathbf{s}_2 = (4, 0, 1)^\top\)
단계 3: \(P^\perp = C(\mathbf{A}^\top)\) 의 기저를 구한다.
\(\mathbf{A}^\top\) 의 열 = 행공간의 기저 = \((1, -3, -4)^\top\)
검증:
\[\mathbf{s}_1 \cdot \mathbf{r} = 3 - 3 - 0 = 0 \checkmark, \quad \mathbf{s}_2 \cdot \mathbf{r} = 4 - 0 - 4 = 0 \checkmark\]
차원 확인: \(\dim P + \dim P^\perp = 2 + 1 = 3 = \dim \mathbb{R}^3\) ✓
# 직교 보공간 완전 계산 예시
A = np.array([[1, -3, -4]], dtype=float)
# 영공간 기저 (특수해)
s1 = np.array([3, 1, 0])
s2 = np.array([4, 0, 1])
# 행공간 기저
r = np.array([1, -3, -4])
print("직교 확인:")
print(f" s1 · r = {np.dot(s1, r)}") # 0
print(f" s2 · r = {np.dot(s2, r)}") # 0
# 영공간 확인
print(f"\nAs1 = {A @ s1}") # [0]
print(f"As2 = {A @ s2}") # [0]
# 차원 확인
from numpy.linalg import matrix_rank
print(f"\ndim(N(A)) = {3 - matrix_rank(A)}") # 2
print(f"dim(C(A^T)) = {matrix_rank(A)}") # 1
print(f"합계 = {3 - matrix_rank(A) + matrix_rank(A)} = dim(R^3) ✓")11 Ch.4 흐름 요약
직교 벡터: v·w = 0
↓
직교 부분공간: V의 모든 벡터 ⊥ W의 모든 벡터
↓
네 부분공간의 직교 관계:
행공간 ⊥ 영공간 (in R^n)
열공간 ⊥ 좌영공간 (in R^m)
↓
직교 보공간: 차원이 맞아야 보공간
dim(행공간) + dim(영공간) = n
dim(열공간) + dim(좌영공간) = m
↓
벡터 분해: x = x_r + x_n (행공간 + 영공간)
↓
§4.2 투영: 한 벡터를 부분공간에 투영하는 공식 P = A(A^T A)^{-1} A^T
↓
§4.3 최소제곱법: Ax=b에 해가 없을 때 정규방정식 A^T A x̂ = A^T b
↓
§4.4 Gram-Schmidt: 임의 기저 → 직교 정규 기저 → QR 분해
12 관련 주제
선행 지식
- Ch.3 §3.6 — Dimensions of the Four Subspaces — 네 부분공간의 차원 (Part 1)
- Ch.1 §1.2 — Lengths and Dot Products — 내적과 코사인 공식
동일 챕터 심화
- Ch.4 §4.1 — Orthogonality of the Four Subspaces — 네 부분공간의 직교 관계
- Ch.4 §4.2 — Projections — 투영 공식과 투영 행렬
- Ch.4 §4.3 — Least Squares Approximations — 정규방정식
- Ch.4 §4.4 — Orthogonal Bases and Gram-Schmidt — 직교 기저와 QR
다른 카테고리 연결
- 최소제곱 회귀 — 직교성의 통계적 응용
- SVD (예정) — 네 부분공간의 직교 기저를 한 번에 구성