[파이썬][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)
위의 코드에서는 다음을 수행합니다:
-
NumPy를 사용하여 계수 행렬
A
와 상수 벡터b
를 정의합니다. -
전진 소거(Forward Elimination) 단계를 수행하여 계수 행렬
A
를 상삼각 행렬(upper triangular matrix)로 변환하고, 상수 벡터b
도 업데이트합니다. -
후진 대입(Back Substitution) 단계를 수행하여 변수 벡터
x
를 계산합니다. -
결과를 출력합니다.
x
는 선형 시스템의 해를 나타냅니다.
가우스 소거법은 작은 규모의 선형 시스템부터 대규모의 행렬에 대한 선형 시스템까지 다양한 문제에 적용할 수 있으며, 행렬의 대각 성분을 피벗으로 선택하고 열 교환을 수행하여 안정적인 결과를 얻을 수 있습니다.