scipy.linalg 패키지의 cosm() 함수는 입력된 정방 행렬(square matrix)의 코사인을 계산하는 데 사용됩니다. 이 루틴은 내부적으로 expm() 함수를 활용하여 행렬 지수(matrix exponential)를 구하고, 이를 기반으로 행렬 코사인을 산출합니다.
행렬 코사인이란?
스칼라에서의 코사인 함수와 마찬가지로, 행렬 코사인도 테일러 급수(Taylor series) 전개를 통해 정의되며 복소수 범위에서도 유효합니다. 수학적으로는 cos(X) = Re(exp(iX)) 관계식을 만족하며, 과학 계산·신호 처리·미분 방정식 풀이 등 다양한 분야에서 활용됩니다.
구문(Syntax)
scipy.linalg.cosm(x)
여기서 x는 코사인을 계산할 입력 배열입니다.
예제 1
다음은 2×2 크기의 정수 배열에 대해 행렬 코사인을 구하는 예제입니다.
# 필요한 라이브러리 임포트
from scipy import linalg
import numpy as np
# 입력 배열 정의
q = np.array([[121 , 10] , [77 , 36]])
print("Array Input :\n", q)
# 행렬 코사인 계산
r = linalg.cosm(q)
# 행렬의 코사인 출력
print("Cosine of Q: \n", r)
출력 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Array Input : [[121 10] [ 77 36]] Cosine of Q: [[-0.89675008 -0.00369979] [-0.02848841 -0.86530184]]
예제 2
이번에는 모든 요소가 1인 3×3 배열에 대해 행렬 코사인을 계산해 보겠습니다.
# 필요한 라이브러리 임포트
from scipy import linalg
import numpy as np
# 입력 배열 정의 (모든 요소가 1인 3x3 배열)
x = np.ones((3, 3))
print("Array Input :\n", x)
# 행렬 코사인 계산
a = linalg.cosm(x)
# 행렬의 코사인 출력
print("Cosine of X: \n", a)
출력 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Array Input : [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] Cosine of X: [[ 0.33666917 -0.66333083 -0.66333083] [-0.66333083 0.33666917 -0.66333083] [-0.66333083 -0.66333083 0.33666917]]
참고 사항
cosm()은 반드시 정방 행렬(n×n)만 입력받을 수 있으며, 비정방 행렬을 넘기면 오류가 발생합니다. 또한 행렬의 고유값(eigenvalue)이 클 경우 수치적 오차가 커질 수 있으므로, 필요하다면 행렬을 적절히 스케일링한 후 계산하는 것이 좋습니다. 유사한 기능으로 사인 행렬을 구하는 sinm(), 탄젠트 행렬을 구하는 tanm() 함수도 scipy.linalg 패키지에서 제공됩니다.