Python SciPy

SciPy를 활용한 행렬식과 역행렬 계산

PyExplorer 2025. 3. 6. 09:22
728x90

SciPy를 활용한 행렬식과 역행렬 계산

1. 서론

선형 대수에서 행렬은 데이터를 효율적으로 표현하고 처리하는 강력한 수단입니다. 특히, 행렬식과 역행렬은 선형 방정식 시스템을 해결하거나 행렬의 특성을 분석할 때 자주 사용됩니다. Python에서는 SciPy 라이브러리의 scipy.linalg 모듈을 활용해 이러한 계산을 쉽게 수행할 수 있습니다.

이번 포스팅에서는 SciPy를 사용해 행렬식과 역행렬을 계산하는 방법에 대해 자세히 살펴보고, 다양한 예제와 함께 실습해보겠습니다.


2. 행렬식이란?

2.1 행렬식의 정의

행렬식(Determinant)은 정사각 행렬(square matrix)에 대해 정의되는 스칼라 값으로, 행렬의 크기와 방향을 나타내는 중요한 지표입니다. 행렬식은 다음과 같은 의미를 갖습니다.

  • 선형 변환의 부피 변화율: 행렬은 선형 변환을 나타내며, 이 변환이 공간을 얼마나 확대 또는 축소하는지 행렬식이 나타냅니다.
  • 가역성 판별: 행렬식이 0이 아니면 행렬은 역행렬을 갖고, 0이면 역행렬이 존재하지 않습니다.

예를 들어, 2×2 행렬 $A$의 행렬식 $\det(A)$는 다음과 같이 계산됩니다.

$$
\det(A) = \begin{vmatrix} a & b \ c & d \end{vmatrix} = ad - bc
$$

2.2 SciPy를 활용한 행렬식 계산

SciPy의 scipy.linalg.det() 함수를 사용하면 손쉽게 행렬식을 구할 수 있습니다.

import numpy as np
from scipy.linalg import det

# 2x2 행렬 예제
A = np.array([[4, 2],
              [3, 1]])

# 행렬식 계산
det_A = det(A)

print(f"행렬 A:\n{A}\n")
print(f"행렬식: {det_A}")

2.3 고차원 행렬의 행렬식

3×3 이상의 고차원 행렬에서도 동일한 방법으로 행렬식을 구할 수 있습니다.

# 3x3 행렬 예제
B = np.array([[6, 1, 1],
              [4, -2, 5],
              [2, 8, 7]])

# 행렬식 계산
det_B = det(B)

print(f"행렬 B:\n{B}\n")
print(f"행렬식: {det_B}")

2.4 행렬식의 성질

행렬식은 다음과 같은 중요한 성질을 갖습니다.

  1. 교환법칙 미적용: $\det(AB) = \det(A) \times \det(B)$이지만, $\det(AB) \neq \det(BA)$입니다.
  2. 전치 행렬과의 관계: $\det(A^T) = \det(A)$
  3. 역행렬과의 관계: $\det(A^{-1}) = 1 / \det(A)$

3. 역행렬이란?

3.1 역행렬의 정의

역행렬(Inverse Matrix)은 행렬 $A$에 대해 곱했을 때 단위 행렬(Identity Matrix)을 생성하는 행렬 $A^{-1}$을 의미합니다.

$$
A \times A^{-1} = I
$$

역행렬이 존재하려면 반드시 행렬식이 0이 아니어야 합니다.

3.2 SciPy를 활용한 역행렬 계산

scipy.linalg.inv() 함수를 사용하면 간단하게 역행렬을 구할 수 있습니다.

from scipy.linalg import inv

# 2x2 행렬 예제
C = np.array([[4, 7],
              [2, 6]])

# 역행렬 계산
inv_C = inv(C)

print(f"행렬 C:\n{C}\n")
print(f"역행렬:\n{inv_C}")

3.3 역행렬의 성질

  1. 역행렬의 역: $(A^{-1})^{-1} = A$
  2. 전치 행렬과의 관계: $(A^T)^{-1} = (A^{-1})^T$
  3. 곱셈에 대한 분배 법칙: $(AB)^{-1} = B^{-1}A^{-1}$

3.4 역행렬 존재 여부 확인

행렬식이 0이면 역행렬이 존재하지 않음을 확인할 수 있습니다.

D = np.array([[1, 2],
              [2, 4]])

try:
    inv_D = inv(D)
    print(f"역행렬:\n{inv_D}")
except np.linalg.LinAlgError:
    print("이 행렬은 역행렬이 존재하지 않습니다.")

4. 실전 예제: 선형 방정식 해 구하기

행렬식과 역행렬은 선형 방정식 시스템을 푸는 데 사용됩니다. 다음과 같은 시스템을 해결해보겠습니다.

$$
4x + 2y = 10\
3x + y = 6
$$

이를 행렬 형태로 표현하면 다음과 같습니다.

$$
A = \begin{bmatrix} 4 & 2 \ 3 & 1 \end{bmatrix}, \quad b = \begin{bmatrix} 10 \ 6 \end{bmatrix}
$$

역행렬을 이용해 다음과 같이 해를 구할 수 있습니다.

$$
x = A^{-1} b
$$

Python 코드는 다음과 같습니다.

# 선형 방정식 예제
A = np.array([[4, 2],
              [3, 1]])
b = np.array([10, 6])

# 역행렬을 이용한 해 구하기
inv_A = inv(A)
x = inv_A @ b

print(f"해: x = {x[0]}, y = {x[1]}")

5. 결론

이번 포스팅에서는 SciPy를 이용해 행렬식과 역행렬을 쉽게 계산하는 방법을 살펴보았습니다. 행렬식은 행렬의 특성을 파악하는 중요한 지표이며, 역행렬은 선형 방정식의 해를 구하거나 시스템을 분석하는 데 필수적입니다.

728x90