Hermite 다항식의 Vandermonde 행렬을 생성하려면 Python NumPy의 numpy.polynomial.hermite 모듈에 포함된 hermvander() 함수를 사용하면 됩니다. 이 함수는 의사(pseudo-)Vandermonde 행렬을 반환하며, 반환되는 행렬의 형태(shape)는 x.shape + (deg + 1,)입니다. 마지막 인덱스는 해당 Hermite 다항식의 차수를 나타내며, 결과의 데이터 타입(dtype)은 변환된 x와 동일합니다.
Vandermonde 행렬의 각 열은 입력 점들에 대해 차수별 Hermite 다항식(H0, H1, H2, ...)을 계산한 값으로 채워집니다. 예를 들어 deg가 2라면 세 개의 열은 각각 H0(x)=1, H1(x)=2x, H2(x)=4x²−2에 해당합니다.
주요 매개변수
- x: 점(point)들의 배열입니다. 요소 중 하나라도 복소수가 포함되어 있으면 dtype이 complex128로, 그렇지 않으면 float64로 변환됩니다. x가 스칼라 값이면 1차원 배열로 자동 변환됩니다.
- deg: 생성될 결과 행렬의 최고 차수입니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np from numpy.polynomial import hermite as H
부동 소수점 값을 포함하는 배열을 생성합니다.
x = np.array([0, 3.5, -1.4, 2.5])
생성한 배열을 화면에 출력합니다.
print("우리의 배열...\n", x)
배열의 차원 수를 확인합니다.
print("\n배열의 차원...\n", x.ndim)
배열 객체의 데이터 타입을 확인합니다.
print("\n배열 객체의 데이터 타입...\n", x.dtype)
배열 객체의 형태(shape)를 확인합니다.
print("\n배열 객체의 형태...\n", x.shape)
Hermite 다항식의 Vandermonde 행렬을 생성하기 위해 hermvander() 함수를 호출합니다. 여기서는 차수를 2로 지정했습니다.
print("\n결과...\n", H.hermvander(x, 2))
전체 예제 코드
import numpy as np
from numpy.polynomial import hermite as H
# 배열 생성하기
x = np.array([0, 3.5, -1.4, 2.5])
# 배열 출력하기
print("우리의 배열...\n", x)
# 차원 확인하기
print("\n배열의 차원...\n", x.ndim)
# 데이터 타입 확인하기
print("\n배열 객체의 데이터 타입...\n", x.dtype)
# 형태(shape) 확인하기
print("\n배열 객체의 형태...\n", x.shape)
# Hermite 다항식의 Vandermonde 행렬을 생성하기 위해 hermvander() 함수 사용
print("\n결과...\n", H.hermvander(x, 2))
실행 결과
우리의 배열...
[ 0. 3.5 -1.4 2.5]
배열의 차원...
1
배열 객체의 데이터 타입...
float64
배열 객체의 형태...
(4,)
결과...
[[ 1. 0. -2. ]
[ 1. 7. 47. ]
[ 1. -2.8 5.84]
[ 1. 5. 23. ]]
출력을 보면 각 행이 하나의 입력 점에 대응합니다. 예를 들어 x=3.5인 경우 H1(3.5)=7, H2(3.5)=4×(3.5)²−2=47이므로 해당 행은 [1, 7, 47]이 됩니다. 이처럼 hermvander()를 활용하면 Hermite 다항식 기반 최소제곱 피팅 등 다양한 수치 해석 작업에 필요한 설계 행렬을 손쉽게 만들 수 있습니다.