Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 scipy.linalg.expm() 함수 완벽 가이드: 행렬 지수 계산 방법


scipy.linalg.expm() 함수란?

scipy.linalg 패키지의 expm() 함수는 파데(Padé) 근사법을 이용하여 행렬 지수(matrix exponential)를 계산하는 함수입니다. 파데 근사란 주어진 차수의 유리함수(rational function)를 통해 어떤 함수를 '가장 잘' 근사하는 기법을 의미하며, 이 방식에서는 근사식의 멱급수가 근사 대상 함수의 멱급수와 일치하도록 설계됩니다.

행렬 지수는 선형 미분방정식의 풀이, 제어 공학, 양자 역학 등 다양한 과학·공학 분야에서 활용되는 중요한 개념이므로, 이를 손쉽게 계산할 수 있는 expm() 함수의 사용법을 익혀두면 큰 도움이 됩니다.

문법

scipy.linalg.expm(x)

여기서 x는 지수 연산을 적용할 입력 행렬입니다.

예제 1

다음 예제를 통해 실제 동작을 확인해 보겠습니다.

# Import the required libraries
from scipy import linalg
import numpy as np

# Define the input array
e = np.array([[100 , 5] , [78 , 36]])
print("Input Array :\n", e)

# Calculate the exponential
m = linalg.expm(e)

# Display the exponential of matrix
print("Exponential of e: \n", m)

출력 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Input Array :
 [[100 5]
 [ 78 36]]
Exponential of e:
 [[6.74928440e+45 4.84840154e+44]
 [7.56350640e+45 5.43330432e+44]]

입력 행렬의 원소 값이 매우 크기 때문에 지수 계산 결과 또한 상당히 큰 숫자로 나타나는 것을 확인할 수 있습니다.

예제 2

이번에는 3×3 영행렬(zero matrix)에 대한 지수를 계산해 보겠습니다.

# Import the required libraries
from scipy import linalg
import numpy as np

# Define the input array
k = np.zeros((3, 3))
print("Input Array :\n", k)

# Calculate the exponential
n = linalg.expm(k)

# Display the exponential of matrix
print("Exponential of k: \n", n)

출력 결과

위 코드는 아래와 같은 결과를 생성합니다.

Input Array :
 [[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
Exponential of k:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

영행렬의 지수는 항상 단위행렬(identity matrix)이 됩니다. 이는 스칼라에서 e의 0제곱이 1이 되는 것과 같은 원리로, 행렬 지수의 정의식을 전개하면 모든 차수 항이 소멸하고 첫 번째 항인 단위행렬만 남게 되기 때문입니다.