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

LU 분해(LU Decomposition)는 가우스 소거법과 유사한 선형 시스템 해결 기법 중 하나입니다. LU 분해는 행렬을 하삼각 행렬(Lower Triangular)과 상삼각 행렬(Upper Triangular)의 곱으로 분해하여 선형 시스템을 풀기 쉬운 형태로 변환하는 기법입니다. 아래 예제에서는 LU 분해를 사용하여 선형 시스템을 해결하는 방법을 보여줍니다.

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

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

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

mport numpy as np

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

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

# LU 분해 수행
lu, piv = scipy.linalg.lu_factor(A)

# 후진 대입을 사용하여 선형 시스템 풀기
x = scipy.linalg.lu_solve((lu, piv), b)

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

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

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

  2. scipy.linalg.lu_factor 함수를 사용하여 계수 행렬 A를 LU 분해합니다. lu는 LU 분해된 행렬이고, piv는 피벗 인덱스입니다.

  3. scipy.linalg.lu_solve 함수를 사용하여 LU 분해된 행렬과 피벗을 이용하여 선형 시스템을 풉니다.

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

LU 분해를 사용하면 동일한 계수 행렬 A에 대한 선형 시스템을 여러 번 풀어야 하는 경우에 효율적으로 해결할 수 있으며, 가우스 소거법보다 수치적으로 안정적인 결과를 얻을 수 있습니다.