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이 되는 것과 같은 원리로, 행렬 지수의 정의식을 전개하면 모든 차수 항이 소멸하고 첫 번째 항인 단위행렬만 남게 되기 때문입니다.