선형대수 과제를 풀다 보면 "이 벡터들이 공간 전체를 채울 수 있냐"는 질문이 계속 나온다. 처음엔 이게 왜 중요한지 잘 몰랐는데, 알고 보니 머신러닝에서 특징 벡터가 충분한지 따질 때도, 그래픽스에서 기저 벡터로 모든 점을 표현할 수 있는지 볼 때도 결국 같은 질문이더라. David Lay 교재 1.4절 Theorem 4가 이 질문에 대한 답을 정리해주는데, 학교 시험에 거의 매 학기 나온다고 한다.
Span이 뭔지부터 다시 짚고 가면, 벡터 집합 {v₁, v₂, ..., vₙ}의 span은 그 벡터들의 모든 가능한 선형 결합으로 만들어지는 집합이다.
Span{v₁, ..., vₙ} = { c₁v₁ + c₂v₂ + ... + cₙvₙ | cᵢ ∈ ℝ }
R³을 span한다는 건 이 벡터들을 적당히 더하고 빼고 곱해서 R³의 어떤 점이든 만들 수 있다는 뜻이다.
Theorem 4가 말하는 건, A가 m × n 행렬일 때 다음 네 문장이 모두 같은 말이라는 거다. 하나가 참이면 나머지도 다 참이고, 하나가 거짓이면 다 거짓이다.
(a) 모든 b ∈ ℝᵐ에 대해 Ax = b는 해를 가진다
(b) 모든 b ∈ ℝᵐ은 A의 열들의 선형 결합이다
(c) A의 열들이 ℝᵐ을 생성(span)한다
(d) A는 모든 행에 피벗 위치를 가진다
(a)~(c)는 사실 같은 말을 다르게 표현한 것뿐이고, 진짜 쓸모 있는 건 (d)다. 계산으로 직접 확인할 수 있는 조건이 이거 하나이기 때문이다.
왜 "모든 행에 피벗"이 핵심 조건인지는 이렇게 생각하면 이해가 됐다. A를 사다리꼴로 만들었을 때 어떤 행이 전부 0이라면, 그 행은 0x₁ + 0x₂ + ... = ? 꼴이 된다. 첨가행렬 [A | b]로 같이 처리했다면 그 행은 0 = (b의 변형된 값) 형태가 되고, 우변이 0이 아니면 모순이라 해가 없어진다. 반대로 A의 모든 행에 피벗이 박혀 있으면 어떤 행 연산을 해도 b 쪽에 모순적인 값이 만들어질 자리가 없다.
여기서 자연스럽게 따라오는 게 있는데, m × n 행렬에서 피벗은 행에도 열에도 한 개씩만 있을 수 있어서 피벗 개수의 최대값은 min(m, n)이다. 그래서 열보다 행이 많은(세로로 긴) 행렬은 모든 행에 피벗을 박는 게 애초에 불가능하고, Rᵐ을 생성할 수 없다. R³에 있는 벡터 2개로는 절대 R³을 생성할 수 없다는 게 바로 이 케이스인데, 평면에 있는 두 화살표로 3차원 공간을 채울 수 없다고 생각하면 직관적으로 와닿는다.
다음 벡터들이 ℝ³을 생성하는지 보는 문제였다.
v₁ = ( 0, 0, -2)
v₂ = ( 0, -3, 8)
v₃ = ( 4, -1, -5)
벡터를 열로 가지는 행렬을 만들면
A = [ 0 0 4 ]
[ 0 -3 -1 ]
[ -2 8 -5 ]
1행이 0 0 4로 시작해서 피벗 잡기가 애매하길래 행 교환부터 했다. R₁ ↔ R₃:
[ -2 8 -5 ]
[ 0 -3 -1 ]
[ 0 0 4 ]
이러면 이미 사다리꼴이고, 1행에 -2, 2행에 -3, 3행에 4로 모든 행에 피벗이 박혀 있다. 그러니 Theorem 4의 (d)가 참이고 (c)도 참, 이 벡터들은 ℝ³을 생성한다.
3×3 행렬이면 행렬식 한 번 계산해도 되는데, det(A) ≠ 0이면 모든 행에 피벗이 있다는 뜻과 같다. 행렬식 단원 끝나고 나면 이 방법이 더 빠르더라.
"열에 피벗"과 "행에 피벗"을 자꾸 헷갈렸다. 이 둘은 서로 다른 정리와 연결된다. 행에 피벗이 있으면 열들이 Rᵐ을 span하는 거고(Theorem 4), 열에 피벗이 있으면 열들이 선형 독립이라는 거다(Theorem 1.7). m × n 행렬에서 m > n인 좁고 긴 행렬은 모든 열엔 피벗을 박을 수 있어도 모든 행은 못 하니까 독립일 수는 있어도 span은 못 한다. m < n인 넓고 짧은 행렬은 반대로 span은 가능해도 독립은 아닐 수 있다. m = n이면 둘 다 되거나 둘 다 안 된다.
첨가행렬 [A | b]에서 "마지막 열에 피벗"이라는 표현도 처음엔 헷갈렸는데, 이건 b 쪽에 피벗이 생긴다는 뜻이고 그러면 0 = nonzero 모순이라 해가 없다는 얘기다. Theorem 4의 (d)는 이게 절대 일어나지 않게 보장하는 조건인 셈이다.
그리고 Span{v₁, v₂}가 v₁과 v₂ 딱 두 벡터만 들어있는 집합이 아니라는 것도 은근 헷갈렸다. 두 벡터의 가능한 모든 선형 결합, 즉 무수히 많은 벡터의 집합이다. 두 벡터가 R³에 있고 서로 평행하지 않다면 그 span은 원점을 지나는 평면이 된다. 참고로 선형 결합에서 모든 계수를 0으로 두면 항상 0벡터가 나오니까, 모든 span은 0벡터를 포함한다. 어떤 집합이 부분공간인지 확인할 때 제일 먼저 체크하는 게 이 부분이다.
열벡터들이 R^n을 생성한다는 말은 임의의 b∈R^n에 대해 Ax=b가 풀린다는 뜻이다. 행 소거 후 모든 행에 피벗이 있으면 각 출력 좌표 방향을 빠짐없이 만들 수 있다. 열의 개수보다 피벗이 어느 행에 놓이는지가 핵심이다.
수치 행렬의 rank는 부동소수점 허용오차에 따라 달라질 수 있다. 정수·유리수 과제는 정확한 행 연산으로 판단하고, NumPy 결과는 피벗 개수 검산으로 사용했다.
| 리버싱 과제 보고서에서 AI 티를 걷어내고 증거 중심으로 다시 쓰기 (0) | 2026.07.28 |
|---|---|
| 선형대수학 — Ax=b의 해는 'p + 동차해'다 (Theorem 6과 평행이동의 기하) (0) | 2026.07.25 |
| 선형대수학 — 첨가행렬과 가우스 소거법으로 연립방정식 풀기 (0) | 2026.07.25 |
| C로 비트스트림 파싱해서 7가지 타입(char ~ double)으로 출력하기 (시스템 프로그래밍 과제) (0) | 2026.07.23 |