제1부 수학적 기초
1.1 선형대수 I: 벡터공간·행렬 분해(LU·QR·고유분해·SVD)
1.1.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자
이 장은 로봇공학의 계산이 반복해서 사용하는 네 가지 행렬 분해 — LU, QR, 고유분해, 특이값 분해(SVD) — 의 정리·알고리즘·수치 거동을 정리한다. 기구학의 자코비안, 최소제곱 추정, 공분산 행렬, 관성 텐서, 이차 계획법의 선형 시스템이 모두 이 네 분해 가운데 하나로 풀린다. 최소제곱·의사역행렬·조건수의 응용은 1.2이 맡고, 이 장은 분해 그 자체를 다룬다. 다룰 질문은 네 가지다. 선형 사상은 어떤 부분공간으로 나뉘는가, 각 분해는 무엇을 보장하고 얼마의 비용이 드는가, 부동소수점에서 어느 분해가 얼마나 안정한가, 로봇 팔의 자코비안에서 특이값은 무엇을 알려 주는가.
배우는 것:
- 네 기본 부분공간 — 열공간·영공간·행공간·좌영공간과 계수-영도 정리.
- 네 가지 분해 — $PA=LU$, $A=QR$, $A=Q\Lambda Q^\top$(대칭), $A=U\Sigma V^\top$의 존재 조건·비용·용도.
- 수치 거동 — LU의 성장 인자(최악 $2^{n-1}$), 하우스홀더 QR의 직교성, SVD의 최적 저계수 근사.
- 풀이 예제 — 순수 파이썬 구현의 잔차 검증, Wilkinson 행렬, 평면 3R 팔 자코비안의 특이값과 영공간.
선수 지식: 행렬 곱·전치·역행렬, 벡터의 내적과 노름 수준의 선형대수. 수식 표기는 A.2과 BK-05의 규약을 따른다.
특히 중요한 독자: 엔지니어·연구자(기구학·추정·제어의 수치 계산), 소프트웨어 개발자(분해 루틴의 선택과 검증).
출처 방침. 이 장의 정리는 교과서와 원 논문에 근거한다. 서지(저자·표제·권·쪽)는 Crossref 응답으로 확인했고 목록은 이 장 끝에 있다. 교과서 본문은 이 장이 직접 읽은 것이 아니라 정리의 출처로만 인용한다
(확인 필요: 정리 번호). 수치는 모두 이 장의 순수 파이썬(표준 라이브러리) 구현으로 계산해 확인했으며, 코드와 입력(시드·제원)은 1.1.5에 있다. 부동소수점 결과는 구현·기계에 따라 마지막 자리가 다를 수 있다.
1.1.2 개념 — 로봇공학에서 행렬 분해가 맡는 일
분해는 하나의 행렬을 구조가 단순한 행렬의 곱으로 바꾸어, 연립방정식을 푸는 일·행렬의 성질(계수·조건·주축)을 읽는 일·근사하는 일을 쉽게 한다. 로봇공학의 문제는 대부분 이 세 가지 중 하나로 환원된다.
| 로봇공학 문제 | 사용하는 행렬 | 사용하는 분해 | 상세 |
|---|---|---|---|
| 역기구학의 뉴턴 단계, 정방 선형 시스템 | 자코비안·헤시안 | LU(부분 피벗) | 2.6 |
| 선형 최소제곱, 캘리브레이션 | 설계 행렬 | QR 또는 SVD | 1.2, 2.17 |
| 관성 텐서의 주축, 공분산의 주성분 | 대칭 행렬 | 고유분해 | 3.1, 1.19 |
| 특이점·조작성·영공간 | 자코비안 | SVD | 2.8, 2.9, 2.11 |
| 칼만 필터의 공분산 갱신 | 대칭 양정부호 행렬 | 숄레스키·고유분해 | 9.3 |
네 분해는 보장하는 것이 다르다. LU는 모든 비특이 정방 행렬에 대해 순열을 더해 존재하고 가장 싸다. QR은 직교 변환만 사용하므로 오차가 커지지 않는다. 고유분해는 대칭 행렬에서만 직교 기저를 보장한다. SVD는 모든 행렬에서 존재하고 계수·영공간·조건수·최적 근사를 한꺼번에 준다.
1.1.3 원리
1.1.3.1 벡터공간·선형 사상·네 기본 부분공간
행렬 $A\in\mathbb R^{m\times n}$은 선형 사상 $x\mapsto Ax$를 정의한다. 다음 네 부분공간이 이 사상의 구조를 모두 나타낸다.
| 부분공간 | 정의 | 속한 공간 | 차원 |
|---|---|---|---|
| 열공간 $\mathcal C(A)$ | $\{Ax\}$ | $\mathbb R^m$ | $r$ |
| 좌영공간 $\mathcal N(A^\top)$ | $\{y: A^\top y=0\}$ | $\mathbb R^m$ | $m-r$ |
| 행공간 $\mathcal C(A^\top)$ | $\{A^\top y\}$ | $\mathbb R^n$ | $r$ |
| 영공간 $\mathcal N(A)$ | $\{x: Ax=0\}$ | $\mathbb R^n$ | $n-r$ |
여기서 $r=\operatorname{rank}A$는 열공간의 차원이며 행공간의 차원과 같다. 두 가지 정리가 구조를 정한다. 계수-영도 정리는 $\dim\mathcal N(A)+\operatorname{rank}A=n$이다. 직교 분해는 $\mathcal N(A)=\mathcal C(A^\top)^{\perp}$, $\mathcal N(A^\top)=\mathcal C(A)^{\perp}$이며, 정의역은 행공간과 영공간의 직교 직합이고 공역은 열공간과 좌영공간의 직교 직합이다.
로봇 팔의 자코비안 $J\in\mathbb R^{m\times n}$에서 열공간은 말단이 낼 수 있는 속도의 집합이고 영공간은 말단을 움직이지 않는 관절 속도(자기 운동)이다. 정역학 관계 $\tau=J^\top w$에서 좌영공간은 관절 토크 없이 구조가 지지하는 렌치에 해당한다(2.8, 2.11, 2.12).
1.1.3.2 LU 분해와 성장 인자
비특이 정방 행렬 $A\in\mathbb R^{n\times n}$에는 순열 행렬 $P$, 단위 하삼각 행렬 $L$, 상삼각 행렬 $U$가 존재하여 $PA=LU$이다. 가우스 소거의 각 단계가 하삼각 행렬의 곱으로 표현되기 때문이다. 연립방정식 $Ax=b$는 $Ly=Pb$와 $Ux=y$의 두 번의 삼각 풀이($O(n^2)$)로 풀린다. 분해의 비용은 약 $\tfrac{2}{3}n^3$ 부동소수점 연산이다(Golub & Van Loan).
부분 피벗은 각 단계에서 해당 열의 절댓값이 가장 큰 행을 피벗으로 고른다. 이때 소거 승수는 $\lvert l_{ij}\rvert\le 1$이다. 소거 중 원소가 커지는 정도는 성장 인자
$$\rho=\frac{\max_{i,j,k}\lvert a_{ij}^{(k)}\rvert}{\max_{i,j}\lvert a_{ij}\rvert}$$
로 측정하며, 역방향 오차의 상한이 $\rho$에 비례한다. Wilkinson(1961)은 부분 피벗에서 $\rho\le 2^{n-1}$이고 이 값이 실제로 도달됨을 보였다. 반면 무작위 행렬의 평균적 거동은 이 상한과 크게 다르다는 연구가 있다(Trefethen & Schreiber, 1990 (확인 필요: 이 장은 논문의 수치를 읽지 않았다)). 두 거동은 1.1.5에서 계산한다.
1.1.3.3 QR 분해와 하우스홀더 반사
$A\in\mathbb R^{m\times n}$ ($m\ge n$)은 직교 행렬 $Q\in\mathbb R^{m\times m}$과 상삼각 $R$로 $A=QR$이다. 직교 행렬은 노름과 각도를 보존하므로 변환이 오차를 증폭하지 않는다. 구성법은 세 가지다.
- 그람-슈미트: 열을 차례로 직교화한다. 고전적 방식은 직교성이 쉽게 무너지고 수정 방식은 개선된다.
- 하우스홀더: 반사 행렬 $H=I-2vv^\top/(v^\top v)$로 열을 하나씩 소거한다. 벡터 $x$를 $\lVert x\rVert_2 e_1$ 방향으로 보내려면 $v=x+\operatorname{sign}(x_1)\lVert x\rVert_2 e_1$로 둔다. 부호를 이렇게 고르면 뺄셈 상쇄가 생기지 않는다(Golub & Van Loan). 반사 행렬에 의한 삼각화는 Householder(1958)가 제안했다. 비용은 약 $2n^2(m-n/3)$이며 정방일 때 $\tfrac43 n^3$이다(Golub & Van Loan). 역방향 안정하다(Trefethen & Bau의 안정성 강의).
- 기븐스 회전: 2차원 평면 회전으로 원소를 하나씩 소거한다. 희소·구조 행렬과 갱신에 적합하다.
직교 행렬 $Q$를 명시적으로 만들지 않고 반사 벡터 $v$ 목록만 저장하면 메모리와 비용이 줄어든다. 최소제곱에서의 사용은 1.2이 다룬다.
1.1.3.4 고유분해
$Av=\lambda v$ ($v\ne0$)의 $\lambda$를 고유값, $v$를 고유벡터라 한다. 스펙트럼 정리에 따르면 실대칭 행렬은 실수 고유값을 갖고 직교 고유벡터로 대각화된다.
$$A=Q\Lambda Q^\top,\qquad Q^\top Q=I,\quad \Lambda=\operatorname{diag}(\lambda_1,\ldots,\lambda_n)$$
비대칭 행렬은 대각화되지 않을 수 있다. 예를 들어 $\begin{bmatrix}1&1\\0&1\end{bmatrix}$은 고유값 1의 고유벡터가 하나뿐이다(조르당 꼴). 로봇공학에서 고유분해가 직접 사용되는 곳은 대칭 행렬이다. 관성 텐서의 고유벡터는 주축이고(3.1), 공분산 행렬의 고유벡터는 주성분이며 고유값은 그 방향의 분산이다(1.19). 선형 시스템의 안정성은 시스템 행렬의 고유값으로 판정한다. 고유값을 구하는 알고리즘으로는 대칭 행렬의 야코비 방법(Jacobi, 1846)과 일반 행렬의 QR 알고리즘(Francis, 1961)이 있다.
1.1.3.5 특이값 분해
임의의 $A\in\mathbb R^{m\times n}$은 직교 행렬 $U\in\mathbb R^{m\times m}$, $V\in\mathbb R^{n\times n}$과 대각 성분이 $\sigma_1\ge\cdots\ge\sigma_p\ge0$ ($p=\min(m,n)$)인 $\Sigma$로
$$A=U\Sigma V^\top=\sum_{i=1}^{p}\sigma_i\,u_i v_i^\top$$
로 분해된다. 이 분해의 성질은 다음과 같다.
- 계수·부분공간. $\sigma_i>0$인 $i$의 수가 $\operatorname{rank}A$이다. $u_1,\dots,u_r$은 열공간, $v_{r+1},\dots,v_n$은 영공간의 정규직교 기저이다.
- 고유값과의 관계. $\sigma_i=\sqrt{\lambda_i(A^\top A)}$이다. 대칭 양반정부호 행렬에서는 $U=V$이며 SVD와 고유분해가 일치한다.
- 노름. $\lVert A\rVert_2=\sigma_1$, $\lVert A\rVert_F=\sqrt{\sum\sigma_i^2}$이다. 비특이 정방 행렬의 2-노름 조건수는 $\kappa_2(A)=\sigma_1/\sigma_n$이다(1.2).
- 최적 저계수 근사(Eckart–Young 정리). 계수 $k$의 $A_k=\sum_{i\le k}\sigma_i u_iv_i^\top$는 계수가 $k$ 이하인 행렬 중 $A$에 가장 가깝다. 오차는 $\lVert A-A_k\rVert_2=\sigma_{k+1}$, $\lVert A-A_k\rVert_F=\sqrt{\sum_{i>k}\sigma_i^2}$이다. Eckart와 Young(1936)이 프로베니우스 노름에서 보였고, Mirsky(1960)가 모든 유니터리 불변 노름으로 확장했다.
기하학적으로 $A$는 단위구를 $\sigma_i$를 반축 길이로 하는 타원체로 사상하며, 반축의 방향이 $u_i$이다(아래 그림).
1.1.4 알고리즘
세 분해의 알고리즘은 다음과 같다. 구현은 1.1.5의 코드에 있다.
부분 피벗 LU
입력: 정방 행렬 A (n×n)
U ← A, L ← 0, p ← (0, 1, ..., n-1)
k = 0, ..., n-1 에 대하여
i ← argmax_{r ≥ k} |U[r][k]|
행 k와 행 i를 U, L, p에서 교환
r = k+1, ..., n-1 에 대하여
L[r][k] ← U[r][k] / U[k][k]
U의 행 r ← U의 행 r − L[r][k] × U의 행 k
L의 대각 ← 1
출력: L, U, p (PA = LU)
하우스홀더 QR
입력: A (m×n, m ≥ n)
R ← A, Q ← I (m×m)
k = 0, ..., min(m-1, n)-1 에 대하여
x ← R[k..m-1][k]
v ← x, v[0] ← v[0] + sign(x[0]) · ‖x‖
R[k..m-1][:] ← R[k..m-1][:] − 2 v (vᵀ R[k..m-1][:]) / (vᵀ v)
Q[:][k..m-1] ← Q[:][k..m-1] − 2 (Q[:][k..m-1] v) vᵀ / (vᵀ v)
출력: Q, R (A = QR)
한쪽 야코비 SVD(Hestenes, 1958): 열 쌍 $(p,q)$마다 회전을 가해 두 열이 직교하도록 하고, 모든 쌍이 직교할 때까지 반복한다. 수렴하면 열의 노름이 특이값이고 정규화한 열이 $U$, 누적 회전이 $V$이다. 라이브러리의 표준 방식은 이중 대각화 뒤 QR 반복을 사용하는 Golub–Kahan(1965) 계열이며 LAPACK의 dgesvd가 이에 해당한다 (확인 필요: 루틴별 알고리즘). 한쪽 야코비는 구현이 짧고 상대 정밀도가 좋아 이 장의 구현에 사용했다.
1.1.5 풀이 예제 — 분해의 구현 검증과 평면 3R 팔의 특이값
세 분해를 순수 파이썬으로 구현해 정리를 수치로 확인하고, 평면 3R 팔의 위치 자코비안에서 특이값이 특이점에 가까워질 때 어떻게 변하는지 계산한다. 결론부터 적으면 다음과 같다. ① 구현의 잔차는 모두 $10^{-15}$ 수준이다. ② 계수 $k$ 근사의 오차는 이론값 $\sigma_{k+1}$과 소수점 여섯째 자리까지 같다. ③ Wilkinson 행렬의 성장 인자는 정확히 $2^{n-1}$이고, 이 값이 $1/u\approx 9\times10^{15}$($u$는 단위 반올림 오차)을 넘는 $n=55$에서 해가 틀린다. ④ 무작위 행렬의 성장 인자는 $n=80$에서도 평균 5 안팎이다. ⑤ 3R 팔에서 $\sigma_2\propto\theta$로 0에 가까워져 조건수가 $\theta$에 반비례한다.
구현. lu(부분 피벗)·qr(하우스홀더)·svd(한쪽 야코비). 파이썬 표준 라이브러리만 사용
| 항목 | 값 |
|---|---|
| 입력 1 | $5\times5$ 행렬, 원소 $U(-1,1)$ 난수(시드 1) |
| 입력 2 | Wilkinson 행렬(대각 1, 하삼각 $-1$, 마지막 열 1), 우변은 해가 모두 1이 되게 정함 |
| 입력 3 | 가우시안 원소 정방 행렬(시드 7), 표본 100개(80차는 20개) |
| 입력 4 | 평면 3R 팔, 링크 길이 0.3 m 세 개(가정), $q_1=30^\circ$, $q_2=q_3=\theta$, 말단 위치 자코비안 $J\in\mathbb R^{2\times3}$ |
| 기준값 | $2\times2$ 행렬 $JJ^\top$의 고유값 제곱근(해석해), 영공간 벡터는 두 행의 외적 |
import math
def matmul(A, B):
Bt = list(zip(*B))
return [[sum(a * b for a, b in zip(r, c)) for c in Bt]
for r in A]
def transpose(A):
return [list(r) for r in zip(*A)]
def lu(A):
"""부분 피벗 LU: PA = LU. (L, U, 순열 p, 성장 인자)"""
n = len(A)
U = [r[:] for r in A]
L = [[0.0] * n for _ in range(n)]
p = list(range(n))
big = g = max(abs(x) for r in A for x in r)
for k in range(n):
i = max(range(k, n), key=lambda r: abs(U[r][k]))
U[k], U[i] = U[i], U[k]
L[k], L[i] = L[i], L[k]
p[k], p[i] = p[i], p[k]
for r in range(k + 1, n):
L[r][k] = U[r][k] / U[k][k]
for c in range(k, n):
U[r][c] -= L[r][k] * U[k][c]
g = max(g, abs(U[r][c]))
for k in range(n):
L[k][k] = 1.0
return L, U, p, g / big
def qr(A):
"""하우스홀더 QR: A = QR (Q는 m×m)"""
m, n = len(A), len(A[0])
R = [r[:] for r in A]
Q = [[float(i == j) for j in range(m)] for i in range(m)]
for k in range(min(m - 1, n)):
v = [R[i][k] for i in range(k, m)]
v[0] += math.copysign(math.hypot(*v), v[0])
nv = sum(t * t for t in v)
if nv == 0:
continue
for j in range(n):
d = 2 * sum(v[i] * R[k + i][j]
for i in range(len(v))) / nv
for i in range(len(v)):
R[k + i][j] -= d * v[i]
for r in range(m):
d = 2 * sum(Q[r][k + i] * v[i]
for i in range(len(v))) / nv
for i in range(len(v)):
Q[r][k + i] -= d * v[i]
return Q, R
def svd(A, tol=1e-15):
"""한쪽 야코비(Hestenes) SVD: A = U diag(s) V^T (m ≥ n)"""
m, n = len(A), len(A[0])
U = [r[:] for r in A]
V = [[float(i == j) for j in range(n)] for i in range(n)]
for _ in range(60):
rot = False
for p in range(n - 1):
for q in range(p + 1, n):
a = sum(U[i][p] ** 2 for i in range(m))
b = sum(U[i][q] ** 2 for i in range(m))
c = sum(U[i][p] * U[i][q] for i in range(m))
if c == 0 or abs(c) <= tol * math.sqrt(a * b):
continue
rot = True
z = (b - a) / (2 * c)
w = abs(z) + math.hypot(1, z)
t = math.copysign(1, z) / w
cs = 1 / math.hypot(1, t)
sn = cs * t
for M in (U, V):
for row in M:
x, y = row[p], row[q]
row[p] = cs * x - sn * y
row[q] = sn * x + cs * y
if not rot:
break
s = [math.sqrt(sum(U[i][j] ** 2 for i in range(m)))
for j in range(n)]
o = sorted(range(n), key=lambda j: -s[j])
Us = [[U[i][j] / s[j] if s[j] else 0.0 for j in o]
for i in range(m)]
return Us, [s[j] for j in o], [[V[i][j] for j in o]
for i in range(n)]
① 분해의 잔차. 구현이 정리를 만족하는 정도는 다음과 같다.
| 분해 | 검사 항목 | 최대 절대 오차 |
|---|---|---|
| LU(부분 피벗) | $PA-LU$ | 1.1e-16 |
| 하우스홀더 QR | $A-QR$ | 2.2e-16 |
| 하우스홀더 QR | $Q^\top Q-I$ | 2.2e-16 |
| 한쪽 야코비 SVD | $A-U\Sigma V^\top$ | 6.7e-16 |
| 한쪽 야코비 SVD | $V^\top V-I$ | 6.7e-16 |
| 한쪽 야코비 SVD | $\sigma_i(A^\top A)-\sigma_i(A)^2$ | 1.3e-15 |
| 대칭 양정부호 $A^\top A$의 SVD | $U-V$ | 4.4e-16 |
② 최적 저계수 근사. 같은 행렬에서 계수 $k$ 근사의 오차는 다음과 같다.
| 계수 $k$ | 스펙트럼 노름 오차 | $\sigma_{k+1}$ | 프로베니우스 노름 오차 | $\sqrt{\sum_{i>k}\sigma_i^2}$ |
|---|---|---|---|---|
| 1 | 1.745582 | 1.745582 | 2.327765 | 2.327765 |
| 2 | 1.402282 | 1.402282 | 1.539947 | 1.539947 |
| 3 | 0.526205 | 0.526205 | 0.636429 | 0.636429 |
| 4 | 0.357980 | 0.357980 | 0.357980 | 0.357980 |
③ Wilkinson 행렬. 성장 인자와 해의 최대 오차는 다음과 같다($\hat x$는 계산한 해).
| $n$ | 성장 인자 $\rho$ | $2^{n-1}$ | $\max_i\lvert \hat x_i-1\rvert$ |
|---|---|---|---|
| 10 | 5.120e+02 | 5.120e+02 | 0.0e+00 |
| 30 | 5.369e+08 | 5.369e+08 | 0.0e+00 |
| 50 | 5.629e+14 | 5.629e+14 | 0.0e+00 |
| 53 | 4.504e+15 | 4.504e+15 | 0.0e+00 |
| 54 | 9.007e+15 | 9.007e+15 | 0.0e+00 |
| 55 | 1.801e+16 | 1.801e+16 | 1.0e+00 |
| 56 | 3.603e+16 | 3.603e+16 | 3.0e+00 |
| 60 | 5.765e+17 | 5.765e+17 | 1.5e+01 |
성장 인자가 $2^{n-1}$과 정확히 같다. $n=54$까지는 모든 중간 값이 정수이고 $2^{53}$ 이하여서 소거가 정확하며 해의 오차가 0이다. $n=55$에서 성장 인자 $2^{54}$가 53비트 가수의 범위를 넘어서 오차가 1(해의 크기와 같은 크기)이 된다. 이 행렬은 최악 사례를 만든 인위적 구성이다.
④ 무작위 행렬의 성장 인자.
| $n$ | 표본 수 | 평균 $\rho$ | 최대 $\rho$ | $2^{n-1}$ |
|---|---|---|---|---|
| 10 | 100 | 1.62 | 3.27 | 5.12e+02 |
| 20 | 100 | 2.25 | 4.47 | 5.24e+05 |
| 40 | 100 | 3.12 | 4.82 | 5.50e+11 |
| 80 | 20 | 4.85 | 5.78 | 6.04e+23 |
가우시안 원소의 정방 행렬에서 평균 성장 인자는 $n=10$에서 1.62, $n=80$에서 4.85이고 상한 $2^{n-1}$과 비교할 수 없이 작다. 이 장의 표본($n\le80$)에서는 평균이 $\sqrt n$의 0.49~0.54배이며, 표본 크기와 분포가 한정되어 일반 법칙을 주장하지 않는다. 최악 사례의 존재와 평균 거동이 크게 다르다는 점이 부분 피벗 LU가 실무에서 널리 사용되는 근거이며(Trefethen & Schreiber, 1990), 이 장은 이 논문의 결과를 읽지 않았다 (확인 필요).
⑤ 평면 3R 팔의 특이값. $q_2=q_3=\theta$로 팔을 펴 나갈 때 특이값은 다음과 같다($J\in\mathbb R^{2\times3}$, 특이값은 두 개이며 영공간은 1차원).
| $\theta$ (°) | $\sigma_1$ (m) | $\sigma_2$ (m) | $\kappa=\sigma_1/\sigma_2$ | 해석해와의 차이 | $\lVert J n\rVert$ |
|---|---|---|---|---|---|
| 90 | 0.5196 | 0.3000 | 1.7 | 0.0e+00 | 2.8e-17 |
| 60 | 0.7961 | 0.2937 | 2.7 | 1.1e-16 | 1.4e-17 |
| 30 | 1.0332 | 0.1738 | 5.9 | 1.1e-16 | 1.3e-18 |
| 10 | 1.1123 | 0.0607 | 18.3 | 7.1e-16 | 1.4e-16 |
| 1 | 1.1224 | 0.0061 | 184.0 | 7.7e-15 | 1.9e-16 |
| 0.1 | 1.1225 | 0.0006 | 1840.2 | 2.1e-14 | 8.2e-15 |
$\sigma_2$는 $\theta\to0$(팔이 펴진 특이 자세)에서 선형으로 0에 가까워진다. $\theta=1^\circ$에서 0.0061 m, $0.1^\circ$에서 0.00061 m로 10분의 1이 되며, 조건수는 184에서 1,840으로 열 배가 된다. 기저 관절각 $q_1$은 특이값을 바꾸지 않는다(좌측 직교 변환 $J\mapsto R J$이므로 $\sigma_i$가 보존되며, $q_1=0^\circ,30^\circ,77^\circ,-120^\circ$에서 $\theta=60^\circ$의 특이값이 $10^{-15}$ 안에서 같다). 영공간 벡터 $n$은 $\lVert Jn\rVert\sim10^{-17}$로 $Jn=0$을 만족하며 자기 운동의 방향이다. 최대 $\sigma_2$는 $\theta\approx77^\circ$에서 0.3165 m이다.
한계. 구현은 소규모 밀집 행렬용 교육 코드이며 대규모·희소·복소·GPU 행렬에는 해당하지 않는다. 한쪽 야코비의 수렴은 허용치($10^{-15}$)와 최대 60회의 회전 순환(sweep)으로 판정했고 수렴 정리를 이 장이 증명하지 않았다. 위치와 자세를 함께 다루는 $6\times n$ 자코비안은 단위가 섞여 특이값을 그대로 비교할 수 없다(2.9). 난수·제원은 가정이다.
견해: 이 책은 로봇 소프트웨어에서 자코비안의 특이점 판정과 영공간 계산에는 SVD를, 정방 시스템의 반복 풀이에는 LU를, 최소제곱에는 QR을 기본으로 둔다고 본다. 근거는 위 예제에서 SVD가 계수·영공간·조건수를 한 분해로 주고, 3R 팔의 $\sigma_2$가 특이점 근방에서 직접 읽히며, LU는 최악 성장 인자가 크더라도 무작위 표본에서 작다는 점이다. 분해의 비용 차이는 1.1.6에 있다.
1.1.6 설계 트레이드오프 — 분해의 선택
자료에서 확인되는 선택지는 네 가지다.
- ① LU. 비용이 가장 작고($\tfrac23n^3$) 정방 시스템에 알맞다. 성장 인자의 최악 사례가 존재하나 실무 표본에서는 작다. 계수 결손을 알려 주지 않는다.
- ② QR. 비용이 LU의 약 두 배($\tfrac43n^3$)이나 직교 변환이어서 안정하다. 직사각 행렬의 최소제곱에 적합하고 열 피벗을 더하면 계수 판정에도 사용된다.
- ③ 고유분해. 대칭 행렬의 주축·주성분과 시스템 안정성에 사용한다. 비대칭 행렬에서는 대각화 가능성과 복소 고유값을 따져야 한다.
- ④ SVD. 계수·영공간·조건수·최적 근사를 모두 주나 가장 비싸다. 비용은 구현과 요구 출력($U$·$V$ 필요 여부)에 의존한다
(확인 필요: 비교 수치).
| 분해 | 비용(정방) | 안정성 | 계수·영공간 정보 | 알맞은 용도 |
|---|---|---|---|---|
| LU(부분 피벗) | $\tfrac23n^3$ | 성장 인자에 의존 | 없음 | 정방 선형 시스템 |
| 숄레스키(대칭 양정부호) | $\tfrac13n^3$ | 안정 | 양정부호 판정 | 공분산·헤시안 풀이 |
| 하우스홀더 QR | $\tfrac43n^3$ | 역방향 안정 | 열 피벗 시 일부 | 최소제곱 |
| SVD | 위 셋보다 큼 | 안정 | 완전 | 특이점·영공간·저계수 근사 |
견해: 분해는 비용이 아니라 필요한 정보로 고른다고 본다. 시스템을 한 번 풀면 LU·QR로 충분하고, 행렬의 계수·특이 방향이 결과에 영향을 주면 SVD를 둔다. 근거는 위 표에서 정보가 많은 분해일수록 비용이 크다는 점과, 로봇 팔의 특이점 판정은 정보(계수와 $\sigma_{\min}$)가 필요한 문제라는 점이다. 실시간 제어 주기에서의 비용은 크기 $n$(6~50)과 컴퓨터 구조에 따라 정해지므로 측정이 필요하다(8.15).
1.1.7 응용 축 비교
여덟 응용 축이 선형대수 계산에 거는 요구의 경향은 다음과 같다(이 책의 정리).
| 응용 축 | 행렬의 크기·구조 | 주된 요구 | 관련 장 |
|---|---|---|---|
| 산업·제조 | 소형 밀집($6\times6$ 자코비안) | 결정적 실행 시간, 특이점 판정 | 2.9 |
| 물류·이동 | 대형 희소(지도·궤적 최적화) | 희소 분해, 갱신 | 1.12 |
| 도로 주행 | 중형 상태 공분산 | 양정부호 유지, 수치 안정 | 9.3 |
| 서비스 | 소형, 저전력 프로세서 | 단정밀도, 메모리 | 8.15 |
| 의료·헬스케어 | 소형 밀집 | 결정성, 검증 가능성 | 26.20 |
| 휴머노이드·범용 | 중형 밀집(전신 동역학) | 최소제곱·QP의 반복 풀이 | 1.13, 3.4 |
| 필드 | 중형, 이상치 포함 | 강건 최소제곱 | 1.12 |
| 국방·안보 | 소형~중형 | 결정성, 임베디드 | 8.15 |
1.1.8 관련 규격·프로토콜
| 문서 | 발행 | 무엇을 정하나 | 상세 장 |
|---|---|---|---|
| IEEE Std 754-2019 | IEEE | 부동소수점 형식·연산·반올림 | 1.18 |
| 『LAPACK Users' Guide』 3판 | SIAM, 1999 | 밀집 선형대수 루틴(LU·QR·고유분해·SVD)의 이름과 인터페이스 | 1.18 |
| Reference-LAPACK 3.12.1 | 2025-01-08(GitHub 릴리스, 조회 2026-11-03) | 참조 구현 | — |
| 수학 표기·기호표 | 이 책 | 전치·반대칭 행렬·노름의 표기 | A.2 |
IEEE 754의 단위 반올림 오차 $u=2^{-53}$(이중 정밀도, 최근접 반올림)이 1.1.5의 성장 인자 임계 $2^{53}$의 근거이다. 규격 본문은 이 장이 읽지 않았고 표제와 번호만 확인했다 (확인 필요: 조항).
1.1.9 관련 규제·인증 요구와의 연결
이 장의 내용에는 직접 적용되는 규제가 없다. 안전 관련 소프트웨어가 수치 라이브러리를 사용할 때의 개발 도구 자격·결정성·검증은 26.20(소프트웨어 안전과 품질 표준)이 다룬다.
1.1.10 한계·유의점·미해결
- 구현의 범위. 밀집 실수 행렬의 소규모 교육 구현이다. 희소·복소·구조 행렬과 병렬·GPU 구현은 다루지 않았다.
- 부동소수점. 결과의 마지막 자리는 구현에 따라 다르다. 성장 인자 임계($n=55$)는 이중 정밀도·이 구현의 값이다.
- 정리의 출처. 교과서의 정리 번호와 원 논문의 상세 조건은 확인하지 않았다
(확인 필요). 서지는 Crossref로 확인했다. - 단위. 위치와 자세를 함께 다루는 자코비안은 특이값이 단위에 의존한다(2.9).
- 미해결. 최악 사례의 성장 인자와 평균 거동의 차이를 이론으로 설명하는 연구의 현황은 이 장이 조사하지 않았다
(확인 필요).
1.1.11 체크포인트·연구 질문
체크포인트:
- 네 기본 부분공간의 차원과 직교 관계를 말하고 로봇 팔 자코비안에서의 의미를 설명할 수 있는가.
- $PA=LU$의 존재 조건, 비용, 부분 피벗의 역할, 성장 인자의 최악 상한을 말할 수 있는가.
- 하우스홀더 반사로 벡터를 $e_1$ 방향으로 보내는 식과 부호 선택의 이유를 설명할 수 있는가.
- 스펙트럼 정리와 SVD의 존재를 진술하고 두 분해가 일치하는 조건을 말할 수 있는가.
- 계수 $k$ 최적 근사의 오차($\sigma_{k+1}$, 프로베니우스 노름의 식)를 쓸 수 있는가.
- 풀이 예제의 표에서 Wilkinson 행렬이 $n=55$에서 틀리는 이유를 설명할 수 있는가.
- 3R 팔의 $\sigma_2$가 $\theta$에 비례해 0이 되는 것을 읽고 조건수의 변화를 설명할 수 있는가.
연구 질문(47.12에 수록한다):
- 로봇 자코비안(6×n)에서 위치·자세의 단위 불일치를 처리하는 특이값 정의(가중 SVD)는 어느 것이 표준에 가까운가(2.9).
- 실시간 제어 주기에서 크기 6~50 행렬의 LU·QR·SVD 실행 시간은 처리기 종류별로 어떻게 다른가.
- 부분 피벗 LU의 최악 성장 인자가 실제 로봇 행렬(자코비안·질량 행렬)에서 얼마나 자주 나타나는가.
1차 출처
- C. Eckart, G. Young, 「The approximation of one matrix by another of lower rank」, Psychometrika 1(3), 1936, 211–218.
- L. Mirsky, 「Symmetric gauge functions and unitarily invariant norms」, The Quarterly Journal of Mathematics 11(1), 1960, 50–59.
- A. S. Householder, 「Unitary triangularization of a nonsymmetric matrix」, Journal of the ACM 5(4), 1958, 339–342.
- J. H. Wilkinson, 「Error analysis of direct methods of matrix inversion」, Journal of the ACM 8(3), 1961, 281–330.
- M. R. Hestenes, 「Inversion of matrices by biorthogonalization and related results」, Journal of the SIAM 6(1), 1958, 51–90.
- G. Golub, W. Kahan, 「Calculating the singular values and pseudo-inverse of a matrix」, SIAM Journal on Numerical Analysis, Series B 2(2), 1965, 205–224.
- J. G. F. Francis, 「The QR transformation — a unitary analogue to the LR transformation, Part 1」, The Computer Journal 4(3), 1961, 265–271.
- C. G. J. Jacobi, 「Über ein leichtes Verfahren, die in der Theorie der Säcularstörungen vorkommenden Gleichungen numerisch aufzulösen」, Journal für die reine und angewandte Mathematik 30, 1846, 51–94.
- L. N. Trefethen, R. S. Schreiber, 「Average-case stability of Gaussian elimination」, SIAM Journal on Matrix Analysis and Applications 11(3), 1990, 335–360.
- G. H. Golub, C. F. Van Loan, 『Matrix Computations』, 4판, Johns Hopkins University Press, 2013
(확인 필요: 정리 번호). - L. N. Trefethen, D. Bau III, 『Numerical Linear Algebra』, SIAM, 1997
(확인 필요: 강의 번호). - E. Anderson 외, 『LAPACK Users' Guide』, 3판, SIAM, 1999; IEEE Std 754-2019 『IEEE Standard for Floating-Point Arithmetic』.
- 서지 확인 경로: Crossref REST API(
api.crossref.org/works, 조회 2026-11-03), GitHub API(Reference-LAPACK/lapack릴리스).
다음 장. 1.2은 선형대수 II로, 이 장의 QR·SVD를 사용해 선형 최소제곱·의사역행렬·영공간·조건수를 다룬다. 로봇공학에서 과결정·부족결정 시스템(역기구학·캘리브레이션·추정)이 풀리는 방식과 조건수가 해의 오차를 얼마나 증폭하는지를 정리한다.