합성 사다리꼴 규칙(Composite Trapezoidal Rule)과 numpy.trapz()
Python에서 주어진 축을 따라 수치 적분을 수행하려면 numpy.trapz() 메서드를 사용할 수 있습니다. 이 메서드는 합성 사다리꼴 규칙을 기반으로 n차원 배열 'y'의 정적분 값을 근사하여 반환합니다.
여기서 중요한 점은 x(샘플 포인트)가 제공되면 배열 요소의 순서 그대로 적분이 진행되며, 값이 자동으로 정렬되지 않는다는 것입니다. 따라서 x 값을 내림차순(역순)으로 지정하면 적분 방향이 반대가 되어 결과값의 부호가 음수로 나타납니다.
반환 결과는 다음과 같습니다.
- 'y'가 1차원 배열이면 결과는 float 형태입니다.
- 'y'가 n차원(n > 1) 배열이면 결과는 'n-1'차원 배열입니다.
주요 매개변수
- y: 적분할 입력 배열 (첫 번째 매개변수)
- x: y 값에 대응하는 샘플 포인트. None이면 샘플 포인트가 간격 dx만큼 균등하게 배치된 것으로 간주합니다. 기본값은 None입니다.
- dx: x가 None일 때 사용되는 샘플 포인트 간의 간격. 기본값은 1입니다.
- axis: 적분을 수행할 축
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
array() 메서드로 정수형 요소를 가진 NumPy 배열을 생성합니다.
arr = np.array([20, 35])
배열을 화면에 출력합니다.
print("Our Array...\n",arr)배열의 차원을 확인합니다.
print("\nDimensions of our Array...\n",arr.ndim)배열의 데이터 타입을 확인합니다.
print("\nDatatype of our Array object...\n",arr.dtype)합성 사다리꼴 규칙으로 적분하기 위해 numpy.trapz() 메서드를 호출합니다. 이때 샘플 포인트 x를 [80, 55]처럼 역순(내림차순)으로 지정합니다.
print("\nResult (trapz)...\n",np.trapz(arr, x = [80, 55]))전체 예제 코드
import numpy as np
# array() 메서드로 정수형 요소를 가진 NumPy 배열 생성
arr = np.array([20, 35])
# 배열 출력
print("Our Array...\n",arr)
# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)
# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)
# 합성 사다리꼴 규칙으로 적분 (샘플 포인트를 역순으로 설정)
print("\nResult (trapz)...\n",np.trapz(arr, x = [80, 55]))실행 결과
Our Array... [20 35] Dimensions of our Array... 1 Datatype of our Array object... int64 Result (trapz)... -687.5
결과 해석
일반적으로 np.trapz(arr, x = [55, 80])처럼 오름차순으로 샘플 포인트를 지정하면 결과는 687.5입니다. 하지만 위 예제에서는 x를 [80, 55]로 역순으로 설정했기 때문에 적분 구간의 방향이 뒤집혀 최종 결과가 -687.5(음수)로 출력됩니다. 이처럼 numpy.trapz()는 x 값의 순서를 그대로 따르므로, 샘플 포인트의 배치 순서가 곧 적분 방향을 결정한다는 점을 기억하면 유용합니다.