목록으로
Chapter 5: 직교성과 정규화
진행률: 5 / 8
예상 시간: 25분난이도: 중급
직교성과 정규화
학습 목표
- 직교와 정규직교의 개념 이해
- 그람-슈미트 과정 마스터
- QR 분해와 최소제곱법 응용
직교성의 개념
직교 벡터
u·v = 0 ⟺ u ⊥ v
두 벡터의 내적이 0일 때 직교
정규직교 벡터
u·v = δᵢⱼ (크로네커 델타)
직교하면서 크기가 1인 벡터들
그람-슈미트 과정
선형독립인 벡터들을 정규직교 벡터로 변환하는 알고리즘
- 1
첫 번째 벡터 정규화
u₁ = v₁ / ||v₁||
- 2
직교 성분 추출
w₂ = v₂ - (v₂·u₁)u₁
- 3
정규화
u₂ = w₂ / ||w₂||
- 4
반복
모든 벡터에 대해 과정 반복
QR 분해
A = QR
- • Q: 정규직교 행렬 (직교 열벡터)
- • R: 상삼각 행렬
응용 1: 선형시스템
Ax = b → QRx = b → Rx = Q^Tb
응용 2: 고유값
QR 알고리즘으로 고유값 계산
최소제곱법 (Least Squares)
Ax = b가 해가 없을 때, ||Ax - b||²를 최소화하는 x 찾기
정규방정식
A^TAx = A^Tb
해: x = (A^TA)⁻¹A^Tb
Python 구현
import numpy as np
def gram_schmidt(V):
"""그람-슈미트 과정 구현"""
n = V.shape[1]
U = np.zeros_like(V, dtype=float)
for i in range(n):
# i번째 벡터 가져오기
u = V[:, i].copy()
# 이전 직교 벡터들에 대한 투영 제거
for j in range(i):
u -= np.dot(V[:, i], U[:, j]) * U[:, j]
# 정규화
U[:, i] = u / np.linalg.norm(u)
return U
# QR 분해
def qr_decomposition(A):
"""QR 분해 구현"""
Q = gram_schmidt(A)
R = Q.T @ A
return Q, R
# 최소제곱법
def least_squares(A, b):
"""최소제곱 해 계산"""
# 방법 1: 정규방정식
x1 = np.linalg.inv(A.T @ A) @ A.T @ b
# 방법 2: QR 분해 사용
Q, R = np.linalg.qr(A)
x2 = np.linalg.solve(R, Q.T @ b)
return x1, x2
# 예제
A = np.array([[1, 0], [1, 1], [1, 2]])
b = np.array([1, 2, 2])
x1, x2 = least_squares(A, b)
print(f"정규방정식 해: {x1}")
print(f"QR 분해 해: {x2}")
print(f"잔차: {np.linalg.norm(A @ x1 - b):.4f}")