[파이썬][Scipy] QR 분해(QR Decomposition) 예

QR 분해(QR Decomposition)는 행렬을 직교 행렬(Q)과 상삼각 행렬(R)의 곱으로 분해하는 방법입니다. QR 분해는 선형 시스템 해를 구하는 데 사용되며, 또한 행렬의 고유값 및 고유벡터 계산 등 다양한 응용 분야에서 유용합니다. 아래 예제에서는 NumPy를 사용하여 QR 분해를 수행하고 선형 시스템을 풀이하는 방법을 보여줍니다.

고려할 선형 시스템은 다음과 같습니다.

2�+3�+�=14�+�+2�=23�+2�+3�=32x+3y+z4x+y+2z3x+2y+3z​=1=2=3​

이제 Python 코드를 사용하여 이 선형 시스템을 QR 분해로 해결해 봅시다.

mport numpy as np

# 계수 행렬 A와 상수 벡터 b 정의
A = np.array([[2, 3, 1],
              [4, 1, 2],
              [3, 2, 3]])

b = np.array([1, 2, 3])

# QR 분해 수행
Q, R = np.linalg.qr(A)

# 상삼각 행렬 R과 직교 행렬 Q 출력
print("상삼각 행렬 R:")
print(R)
print("직교 행렬 Q:")
print(Q)

# Q^T * b 계산
Qt_b = np.dot(Q.T, b)

# 후진 대입을 사용하여 선형 시스템 풀기
x = np.linalg.solve(R, Qt_b)

# 결과 출력
print("선형 시스템의 해:")
print(x)

위의 코드에서는 다음을 수행합니다:

  1. NumPy를 사용하여 계수 행렬 A와 상수 벡터 b를 정의합니다.

  2. np.linalg.qr 함수를 사용하여 QR 분해를 수행합니다. Q는 직교 행렬이고, R은 상삼각 행렬입니다.

  3. QR 분해를 사용하여 Q^T * b를 계산합니다. 여기서 Q^T는 직교 행렬 Q의 전치 행렬입니다.

  4. np.linalg.solve 함수를 사용하여 상삼각 행렬 R을 이용하여 선형 시스템을 풉니다.

  5. 결과를 출력합니다. x는 선형 시스템의 해를 나타냅니다.

QR 분해는 행렬의 안정성을 유지하면서 선형 시스템을 해결할 수 있으며, 행렬의 고유값 및 고유벡터 계산과 같은 다양한 응용에 활용됩니다.