Ch.3 §3.5 — Independence, Basis and Dimension

선형 독립, 기저, 차원 — 벡터 공간의 뼈대를 세우는 세 개념

선형 독립·생성·기저·차원의 정의와 증명을 다룬다. 피벗 열이 열 공간의 기저가 되고, 차원이 랭크와 일치함을 보인다. 행렬 공간·함수 공간으로 개념을 확장한다.

Mathematics
Linear Algebra
저자

Kwangmin Kim

공개

2026년 04월 09일

1 개요

이 절의 핵심 질문은 “벡터 공간을 가장 경제적으로 기술하려면 몇 개의 벡터가 필요한가?” 이다. 이 질문에 답하려면 세 개념이 필요하다.

  • 선형 독립(Linear Independence): 불필요한 벡터가 없다
  • 생성(Spanning): 공간 전체를 표현할 수 있다
  • 기저(Basis): 독립 + 생성을 동시에 만족하는 최소 집합

그리고 “기저의 크기”가 공간의 차원(Dimension) 이다.

핵심 결론을 미리 제시한다.

\[ \dim(C(A)) = r, \quad \dim(N(A)) = n - r \]

이는 랭크-영공간 정리(Rank-Nullity Theorem)로도 불리며, 선형대수 전체를 관통하는 가장 중요한 등식 중 하나다.


2 선형 독립 (Linear Independence)

2.1 두 가지 동치 정의

정의 (열 관점) 행렬 \(A\) 의 열들이 선형 독립이라는 것은 \(Ax = 0\) 의 유일한 해가 \(x = 0\) 인 것이다.

\[ Ax = 0 \implies x = 0 \]

이 정의는 소거법과 직접 연결된다. \(Ax = 0\) 을 풀 때 자유 변수가 하나라도 생기면 비자명해가 존재하므로, 열들이 선형 종속이다.

정의 (선형결합 관점) 벡터 \(v_1, v_2, \ldots, v_n\)선형 독립이라는 것은 다음을 만족할 때이다.

\[ x_1 v_1 + x_2 v_2 + \cdots + x_n v_n = 0 \implies x_1 = x_2 = \cdots = x_n = 0 \]

“영벡터를 만드는 유일한 방법은 모든 계수가 0인 것뿐”이라는 뜻이다.

이 두 정의는 동치다. \(Ax = x_1 a_1 + x_2 a_2 + \cdots + x_n a_n\) 이므로, 행렬 표현은 선형결합의 단순한 재표기이다.

2.2 직관: 종속이란 “중복 정보”

벡터들이 선형 종속이면 그 중 적어도 하나는 나머지들의 선형결합으로 표현된다.

\[ v_k = c_1 v_1 + \cdots + c_{k-1} v_{k-1} + c_{k+1} v_{k+1} + \cdots + c_n v_n \]

즉, \(v_k\)중복 정보다. 삭제해도 공간이 줄어들지 않는다.

반면 독립이면 어떤 벡터도 나머지로 표현 불가능하다. 각 벡터가 고유한 “방향”을 담당한다.

2.3 예시

\(v_1 = (1,0), v_2 = (0,1), v_3 = (2,3)\)\(\mathbb{R}^2\) 에서 선형 종속이다.

\[ 2v_1 + 3v_2 - v_3 = (2,0) + (0,3) - (2,3) = (0,0) \]

\(v_3\)\(v_1, v_2\) 의 결합이므로 중복이다. 2차원 공간에 벡터 세 개가 있으면 반드시 종속이 된다.


3 n > m이면 반드시 선형 종속

정리: \(m < n\) 이면, \(\mathbb{R}^m\) 에 있는 \(n\) 개의 벡터는 항상 선형 종속이다.

증명: 이 벡터들을 열로 가지는 \(m \times n\) 행렬 \(A\) 를 만든다. \(m < n\) 이면 소거 후 피벗이 최대 \(m\) 개이므로 \(r \leq m < n\). 따라서 자유 변수가 \(n - r \geq 1\) 개 존재하고, \(Ax = 0\) 의 비자명해가 있으므로 열들은 선형 종속이다. \(\square\)

직관: \(n\) 차원의 정보를 \(m\) 차원 공간에 담으려 하면 \((m < n)\) 반드시 충돌(중복)이 생긴다. 이는 비둘기집 원리의 선형대수 버전이다.


4 피벗 열과 자유 열

\(A\) 를 소거하면 피벗 위치가 드러난다.

  • 피벗 열: 새로운 방향을 도입 → 선형 독립
  • 자유 열: 피벗 열들의 선형결합 → 선형 종속

구체적으로, 자유 열 \(j\) 에 해당하는 특수해 \(x\)\(j\) 번째 성분을 1로 놓으면, 나머지 피벗 변수 성분이 정확히 그 결합 계수를 준다.

예시: \[ A = \begin{bmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \end{bmatrix} \xrightarrow{\text{소거}} R = \begin{bmatrix} 1 & 2 & 3 \\ 0 & 0 & 0 \end{bmatrix} \]

  • 피벗 열: 열 1 (새 방향)
  • 자유 열: 열 2, 열 3 (열 2 = 2×열1, 열 3 = 3×열1)

5 생성 (Spanning)

벡터들의 집합이 공간 \(V\)생성(span) 한다는 것은, 그 선형결합으로 \(V\) 의 모든 벡터를 만들 수 있다는 뜻이다.

\[ V = \{c_1 v_1 + c_2 v_2 + \cdots + c_k v_k \mid c_i \in \mathbb{R}\} \]

예를 들어: - \((1,0)\)\((0,1)\)\(\mathbb{R}^2\) 를 생성한다. - \((1,2)\)\((2,4)\)\(\mathbb{R}^2\) 를 생성하지 못한다 (같은 방향의 직선만 생성).

5.1 행 공간 (Row Space)

\(A\)행 공간 \(C(A^T)\)\(A\) 의 행들의 선형결합 전체다. \(A^T\) 의 열 공간이므로 \(C(A^T) \subseteq \mathbb{R}^n\) 이다.

\[ C(A^T) = \text{span of rows of } A \]

이후에 열 공간 \(C(A) \subseteq \mathbb{R}^m\), 영공간 \(N(A) \subseteq \mathbb{R}^n\), 좌영공간 \(N(A^T) \subseteq \mathbb{R}^m\) 과 함께 네 개의 근본 부분공간을 이룬다.


6 기저 (Basis)

6.1 정의

벡터 공간 \(V\)기저(basis) 는 다음 두 조건을 동시에 만족하는 벡터의 집합이다.

  1. 선형 독립: 어떤 벡터도 나머지의 결합이 아니다
  2. 생성: 선형결합으로 \(V\) 전체를 표현할 수 있다

“독립 + 생성”은 서로 보완적이다.

  • 독립만으로는 생성이 부족할 수 있다 (방향을 빠뜨림)
  • 생성만으로는 중복이 있을 수 있다 (불필요한 벡터 포함)

기저는 이 둘의 균형점 이다. 가장 경제적인 생성 집합이다.

6.2 표현의 유일성

기저의 핵심 성질: \(V\) 의 모든 벡터는 기저 벡터들의 유일한 선형결합으로 표현된다.

증명: \(v = a_1 v_1 + \cdots + a_k v_k\)\(v = b_1 v_1 + \cdots + b_k v_k\) 두 표현이 있다고 하자. 빼면 \((a_1-b_1)v_1 + \cdots + (a_k-b_k)v_k = 0\). 독립성에 의해 \(a_i - b_i = 0\) 이므로 \(a_i = b_i\). \(\square\)

좌표계(coordinate system)가 이 유일성에 기반한다. 기저를 선택하면 각 벡터의 “좌표”가 확정된다.

6.3 가역 행렬의 열 = \(\mathbb{R}^n\) 의 기저

\(n \times n\) 가역 행렬 \(A\) 의 열 \(a_1, \ldots, a_n\)\(\mathbb{R}^n\) 의 기저다.

  • \(A\) 가 가역 \(\implies\) \(Ax = 0\) 의 유일해 \(x = 0\) \(\implies\) 열들 독립
  • \(A\) 가 가역 \(\implies\) 임의의 \(b\) 에 대해 \(Ax = b\) 유일해 존재 \(\implies\) 열들이 \(\mathbb{R}^n\) 생성

표준 기저는 단위 행렬 \(I\) 의 열 \(e_1, e_2, \ldots, e_n\) 이다.


7 열 공간과 행 공간의 기저

소거법은 기저를 자동으로 찾아준다.

7.1 열 공간의 기저

\(A\)피벗 열들\(C(A)\) 의 기저다.

단, 주의: \(R\) 의 피벗 열이 아니라 원래 행렬 \(A\) 의 피벗 열을 사용해야 한다. 소거 과정에서 열 공간이 변하기 때문이다 (\(A\)\(R\) 의 열 공간은 다를 수 있다).

예: \(A = \begin{bmatrix} 1 & 2 & 3 \\ 1 & 2 & 3 \end{bmatrix}\) 에서 피벗은 열 1뿐. \(C(A)\) 의 기저는 \((1,1)\) 하나, 즉 1차원 직선이다.

7.2 행 공간의 기저

\(R\)(RREF)의 영이 아닌 피벗 행들\(C(A^T)\) 의 기저다.

소거는 행 공간을 보존한다. 행 연산이 행들의 선형결합이므로, 행 공간이 불변이다.

\[ C(A^T) = C(R^T) \]

따라서 \(R\) 의 피벗 행들이 행 공간의 기저가 된다.


8 차원 (Dimension)

8.1 정의와 유일성

벡터 공간 \(V\)차원(dimension) \(\dim(V)\) 는 임의의 기저가 가지는 벡터의 수다.

핵심 사실: 같은 공간의 서로 다른 기저는 항상 벡터 수가 같다.

증명: \(V\) 에 기저 \(A = \{a_1, \ldots, m\}\) 과 기저 \(B = \{b_1, \ldots, n\}\) 이 있다고 하자. \(n > m\) 으로 가정하면, \(b_1, \ldots, b_n\) 을 열로 가지는 \(m \times n\) 행렬 \(W\) 에서 \(VA = W\) 를 만족하는 행렬 \(A\) 를 찾을 수 있다 (A: \(m \times n\), 넓은 행렬). \(n > m\) 이면 \(Ax = 0\) 의 비자명해 \(x \neq 0\) 이 존재한다. \(Wx = VAx = V(Ax) = V \cdot 0 = 0\). 그런데 \(W\) 의 열들(= \(B\))은 기저이므로 독립이어야 한다. 모순. 따라서 \(n \leq m\), 대칭으로 \(m \leq n\) 이므로 \(m = n\). \(\square\)

이 정리가 “차원이 잘 정의된다”는 것을 보장한다.

8.2 열 공간과 영공간의 차원

\[ \boxed{\dim(C(A)) = r, \quad \dim(N(A)) = n - r} \]

  • \(C(A)\) 의 기저: \(A\) 의 피벗 열 \(r\)
  • \(N(A)\) 의 기저: 특수해(special solutions) \(n - r\)

기하학적 직관: \(n\) 개의 열 중 \(r\) 개가 “진짜 정보”(피벗)이고 나머지 \(n-r\) 개가 “자유도”(종속)다. 자유도는 영공간의 차원이 된다.

이 두 차원을 합치면:

\[ r + (n - r) = n \]

정확히 \(\mathbb{R}^n\) 전체를 설명한다. 열 공간이 “생성하는 방향”의 수와 영공간이 “무너지는 방향”의 수가 더해져 전체 입력 공간을 완성한다.

8.3 네 가지 부분공간의 차원 정리

부분공간 포함 공간 차원
\(C(A)\) (열 공간) \(\mathbb{R}^m\) \(r\)
\(N(A)\) (영공간) \(\mathbb{R}^n\) \(n-r\)
\(C(A^T)\) (행 공간) \(\mathbb{R}^n\) \(r\)
\(N(A^T)\) (좌영공간) \(\mathbb{R}^m\) \(m-r\)

이 네 공간이 네 개의 근본 부분공간(Four Fundamental Subspaces) 이며, 다음 절에서 이들의 관계(직교성)를 다룬다.


9 행렬 공간 (Matrix Space)

벡터 공간의 개념은 수의 열뿐 아니라 행렬에도 적용된다.

9.1 \(2 \times 2\) 행렬의 공간 \(M\)

\(2 \times 2\) 실수 행렬 전체의 집합 \(M\) 은 덧셈과 스칼라 곱에 닫혀 있으므로 벡터 공간이다.

표준 기저: \[ \begin{bmatrix}1&0\\0&0\end{bmatrix}, \quad \begin{bmatrix}0&1\\0&0\end{bmatrix}, \quad \begin{bmatrix}0&0\\1&0\end{bmatrix}, \quad \begin{bmatrix}0&0\\0&1\end{bmatrix} \]

\(\dim(M) = 4\). 일반적으로 \(n \times n\) 행렬 공간의 차원은 \(n^2\) 이다.

9.2 부분공간들의 차원

공간 정의 차원
모든 \(n \times n\) 행렬 \(a_{ij}\) 임의 \(n^2\)
대칭 행렬 \(S\) \(A = A^T\) \(n(n+1)/2\)
상삼각 행렬 \(U\) \(a_{ij} = 0 (i > j)\) \(n(n+1)/2\)
대각 행렬 \(D\) \(a_{ij} = 0 (i \neq j)\) \(n\)

관계: \(S \cap U = D\) 이고 \(\dim(S) + \dim(U) = n^2 + n = \dim(M) + \dim(D)\). 이는 포함-배제 원리의 선형대수 버전이다.

\(S + U = M\) (모든 행렬은 대칭 + 상삼각 성분으로 분해된다)이고, \(S \cap U = D\) 이다.


10 함수 공간 (Function Space)

선형대수는 행렬에만 국한되지 않는다. 함수들의 집합도 벡터 공간이 될 수 있다.

10.1 미분 방정식의 해 공간

예시 1: \(y'' = -y\)

이 방정식의 해 공간은 2차원 벡터 공간이다. 기저는:

\[ y_1 = \sin x, \quad y_2 = \cos x \]

임의의 해는 \(y = c_1 \sin x + c_2 \cos x\) (선형결합)로 표현된다. \(y_1, y_2\) 가 독립임은 \(c_1 \sin x + c_2 \cos x = 0\) (모든 \(x\)) \(\implies c_1 = c_2 = 0\) 으로 확인한다.

예시 2: \(y'' = 0\)

이 방정식의 해 공간도 2차원이다. 기저는:

\[ y_1 = x, \quad y_2 = 1 \]

임의의 해는 \(y = c_1 x + c_2\) (1차 다항식 전체)이다.

10.2 핵심 관찰

미분 연산자 \(D^2 = d^2/dx^2\) 는 선형 변환이다. - \(D^2 y = -y\) \(\implies\) 해 공간 차원 = 2 - \(D^2 y = 0\) \(\implies\) 해 공간 차원 = 2

일반적으로 \(n\) 차 선형 상미분방정식의 해 공간은 \(n\) 차원 벡터 공간이다. 행렬의 영공간이 \(Ax = 0\) 의 해 공간인 것처럼, 미분방정식의 해 공간도 선형 연산자의 “영공간”이다.


11 핵심 관계 정리

지금까지 배운 개념들의 관계를 정리한다.

11.1 기저 선택 방법

목표 방법
\(C(A)\) 의 기저 \(A\) 의 피벗 열 (\(r\) 개)
\(N(A)\) 의 기저 \(Ax = 0\) 의 특수해 (\(n-r\) 개)
\(C(A^T)\) 의 기저 \(R\) 의 피벗 행 (\(r\) 개)
\(N(A^T)\) 의 기저 \(A^T y = 0\) 의 특수해 (\(m-r\) 개)

11.2 랭크-영공간 정리 (Rank-Nullity Theorem)

\[ \underbrace{\dim(C(A))}_{\text{랭크}} + \underbrace{\dim(N(A))}_{\text{영공간 차원}} = n \]

\[ r + (n - r) = n \]

이 정리는 행렬 \(A\) 의 “입력 공간” \(\mathbb{R}^n\) 이 두 부분으로 쪼개진다는 것을 말한다. - \(r\) 개의 방향은 \(A\) 에 의해 생존한다 (열 공간에 기여) - \(n-r\) 개의 방향은 \(A\) 에 의해 죽는다 (영공간)

11.3 독립·생성·기저의 관계

\(k\) 차원 공간 \(V\) 에서:

조건 결론
\(k\) 개 독립 벡터 자동으로 \(V\) 생성 → 기저
\(k\) 개 벡터가 \(V\) 생성 반드시 독립 (만약 종속이면 삭제 가능하므로 \(k\) 개로 생성하는 기저가 존재 → 차원 \(< k\), 모순)
\(k+1\) 개 벡터 반드시 종속 (\(k\) 차원에 \(k+1\) 개는 넘침)
\(k-1\) 개 벡터 \(V\) 생성 불가 (부족)

12 응용: 왜 중요한가

분야 활용
PCA (주성분 분석) 공분산 행렬의 기저 = 주성분 방향, 차원 = 성분 수
데이터 압축 \(r < n\) 이면 \(n\) 차원 데이터를 \(r\) 차원으로 압축 가능
최소자승법 해의 존재 조건 = \(b \in C(A)\), 유일성 조건 = \(N(A) = \{0\}\)
신경망 레이어의 랭크 = 유효 표현 차원, 영공간 = “죽은 방향”
제어 이론 가제어성 행렬의 랭크 = 제어 가능한 차원 수
암호학 코드 공간의 차원 = 독립 메시지 비트 수

13 Python 구현

#| label: independence-basis-dimension
#| fig-cap: "선형 독립 판정, 기저 추출, 차원 계산"

import numpy as np
from sympy import Matrix, symbols, latex
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# ── Step 1: 선형 독립 판정 ──────────────────────────────
print("=" * 55)
print("Step 1: 선형 독립 판정")
print("=" * 55)

# 예시 1: 독립
A1 = np.array([[1, 0, 0],
               [0, 1, 0],
               [0, 0, 1]], dtype=float)

# 예시 2: 종속 (3번째 열 = 1번째 + 2번째)
A2 = np.array([[1, 2, 3],
               [1, 3, 4],
               [0, 1, 1]], dtype=float)

for label, A in [("독립 (단위행렬)", A1), ("종속 (열3 = 열1+열2)", A2)]:
    rank = np.linalg.matrix_rank(A)
    n_cols = A.shape[1]
    print(f"\n행렬: {label}")
    print(f"  랭크: {rank}, 열 수: {n_cols}")
    if rank == n_cols:
        print("  → 열들은 선형 독립")
    else:
        print(f"  → 열들은 선형 종속 (자유 변수 {n_cols - rank}개)")

# ── Step 2: 기저 추출 (열 공간 & 영공간) ───────────────────
print("\n" + "=" * 55)
print("Step 2: 기저 추출")
print("=" * 55)

A = Matrix([
    [1, 2, 0, 3],
    [2, 4, 1, 7],
    [3, 6, 2, 11]
])

R, pivots = A.rref()
print(f"\nA =\n{np.array(A).astype(float)}")
print(f"\nRREF R =\n{np.array(R.tolist(), dtype=float)}")
print(f"\n피벗 위치 (0-인덱스): {pivots}")

# 열 공간의 기저: A의 피벗 열
print("\n열 공간 C(A)의 기저 (A의 피벗 열들):")
for j in pivots:
    col = np.array(A.col(j).tolist(), dtype=float).flatten()
    print(f"  열 {j+1}: {col}")

# 영공간의 기저: 특수해
print(f"\n영공간 N(A)의 기저 (특수해):")
ns = A.nullspace()
for i, v in enumerate(ns):
    print(f"  특수해 {i+1}: {np.array(v.tolist(), dtype=float).flatten()}")

rank_A = len(pivots)
n_cols = A.shape[1]
print(f"\n랭크 r = {rank_A}")
print(f"dim(C(A)) = {rank_A}")
print(f"dim(N(A)) = {n_cols} - {rank_A} = {n_cols - rank_A}")
print(f"검증: {rank_A} + {n_cols - rank_A} = {n_cols} (= 열 수) ✓")

# 행 공간의 기저: R의 피벗 행
print("\n행 공간 C(A^T)의 기저 (R의 피벗 행들):")
for i, j in enumerate(pivots):
    row = np.array(R.row(i).tolist(), dtype=float).flatten()
    print(f"  행 {i+1}: {row}")

# ── Step 3: 차원과 기저 시각화 ──────────────────────────
print("\n" + "=" * 55)
print("Step 3: 2D 및 3D 기저 시각화")
print("=" * 55)

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# (a) R^2에서 독립 vs 종속
ax = axes[0]
v1 = np.array([1, 0])
v2 = np.array([0, 1])
v3 = np.array([2, 3])  # 종속

origin = np.zeros(2)
ax.quiver(*origin, *v1, color='steelblue', scale=1, scale_units='xy',
          angles='xy', width=0.015, label='$v_1=(1,0)$')
ax.quiver(*origin, *v2, color='coral', scale=1, scale_units='xy',
          angles='xy', width=0.015, label='$v_2=(0,1)$')
ax.quiver(*origin, *v3, color='green', scale=1, scale_units='xy',
          angles='xy', width=0.015, label='$v_3=2v_1+3v_2$')

ax.set_xlim(-0.5, 3); ax.set_ylim(-0.5, 4)
ax.axhline(0, color='k', lw=0.5); ax.axvline(0, color='k', lw=0.5)
ax.set_title("선형 독립 vs 종속 ($\\mathbb{R}^2$)", fontsize=11)
ax.legend(fontsize=9); ax.set_aspect('equal')
ax.grid(True, alpha=0.3)

# (b) 행렬 공간 차원 막대 그래프
ax2 = axes[1]
n = 3
spaces = ['$M_{n\\times n}$', '대칭 $S$', '상삼각 $U$', '대각 $D$']
dims = [n**2, n*(n+1)//2, n*(n+1)//2, n]
colors = ['steelblue', 'coral', 'mediumseagreen', 'orchid']

bars = ax2.bar(spaces, dims, color=colors, edgecolor='black', alpha=0.8)
for bar, d in zip(bars, dims):
    ax2.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 0.1,
             str(d), ha='center', va='bottom', fontweight='bold')

ax2.set_ylabel('차원 (dimension)', fontsize=11)
ax2.set_title(f'$n={n}$ 일 때 행렬 공간의 차원', fontsize=11)
ax2.set_ylim(0, n**2 + 2)
ax2.grid(True, axis='y', alpha=0.3)

plt.tight_layout()
plt.savefig('independence_basis_dimension.png', dpi=130, bbox_inches='tight')
plt.show()
print("\n시각화 완료.")

14 관련 주제

  • §3.6 Dimensions of the Four Subspaces: 네 개의 근본 부분공간 차원 정리의 완성
  • §3.3 Rank and Row Reduced Form: 랭크 = 피벗 수 = \(\dim(C(A))\) 의 기반
  • §6.1 Eigenvalues and Eigenvectors: 고유벡터들이 독립이면 기저를 이룸
  • §7.1 Symmetric Matrices: 대칭 행렬의 고유벡터는 직교 기저를 이룸
  • PCA: 공분산 행렬의 열 공간 기저 = 주성분 방향

Subscribe

Enjoy this blog? Get notified of new posts by email: