[파이썬][Scipy] 가우스 소거법(Gaussian Elimination) 예제

가우스 소거법(Gaussian Elimination)은 선형 시스템을 풀기 위한 중요한 수치 해석 기법 중 하나입니다. 아래 예제에서는 가우스 소거법을 사용하여 선형 시스템을 해결하는 방법을 보여줍니다.

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

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

이제 Python 코드를 사용하여 이 선형 시스템을 가우스 소거법으로 해결해 봅시다.

mport numpy as np

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

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

# 가우스 소거법으로 선형 시스템 풀기
n = len(b)
x = np.zeros(n)

# 전진 소거
for k in range(n-1):
    for i in range(k+1, n):
        factor = A[i, k] / A[k, k]
        for j in range(k, n):
            A[i, j] -= factor * A[k, j]
        b[i] -= factor * b[k]

# 후진 대입
x[n-1] = b[n-1] / A[n-1, n-1]
for k in range(n-2, -1, -1):
    x[k] = (b[k] - np.sum(A[k, k+1:] * x[k+1:])) / A[k, k]

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

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

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

  2. 전진 소거(Forward Elimination) 단계를 수행하여 계수 행렬 A를 상삼각 행렬(upper triangular matrix)로 변환하고, 상수 벡터 b도 업데이트합니다.

  3. 후진 대입(Back Substitution) 단계를 수행하여 변수 벡터 x를 계산합니다.

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

가우스 소거법은 작은 규모의 선형 시스템부터 대규모의 행렬에 대한 선형 시스템까지 다양한 문제에 적용할 수 있으며, 행렬의 대각 성분을 피벗으로 선택하고 열 교환을 수행하여 안정적인 결과를 얻을 수 있습니다.