Hermite 다항식의 의사 Vandermonde 행렬이란?
Python NumPy에서 제공하는 hermite.hermvander3d() 함수를 사용하면 Hermite 다항식에 대한 x, y, z 샘플 좌표의 의사 Vandermonde(반데르몽드) 행렬을 손쉽게 생성할 수 있습니다. 이 함수는 계산된 의사 Vandermonde 행렬을 반환합니다.
매개변수 x, y, z는 각각 점 좌표를 담은 배열로, 세 배열은 반드시 동일한 형태(shape)를 가져야 합니다. 배열 요소 중 하나라도 복소수가 포함되어 있으면 데이터 타입은 자동으로 complex128로 변환되고, 그렇지 않으면 float64로 변환됩니다. 스칼라 값이 입력되면 1차원 배열로 변환됩니다. 또한 매개변수 deg는 [x_deg, y_deg, z_deg] 형태의 최대 차수 목록을 지정합니다.
단계별 구현 방법
1단계: 라이브러리 임포트
먼저 필요한 라이브러리를 불러옵니다.
import numpy as np
from numpy.polynomial import hermite as H
2단계: 좌표 배열 생성
numpy.array() 메서드를 사용해 서로 동일한 형태를 가지는 x, y, z 좌표 배열을 생성합니다.
x = np.array([-2.+2.j, -1.+2.j])
y = np.array([0.+2.j, 1.+2.j])
z = np.array([2.+2.j, 3. + 3.j])
3단계: 배열 속성 확인
생성된 배열과 각 배열의 데이터 타입(dtype), 차원(ndim), 형태(shape)를 출력해 확인합니다.
print('Array1...\n', x)
print('\nArray2...\n', y)
print('\nArray3...\n', z)
print('\nArray1 datatype...\n', x.dtype)
print('\nArray2 datatype...\n', y.dtype)
print('\nArray3 datatype...\n', z.dtype)
print('\nDimensions of Array1...\n', x.ndim)
print('\nDimensions of Array2...\n', y.ndim)
print('\nDimensions of Array3...\n', z.ndim)
print('\nShape of Array1...\n', x.shape)
print('\nShape of Array2...\n', y.shape)
print('\nShape of Array3...\n', z.shape)
4단계: 의사 Vandermonde 행렬 생성
hermite.hermvander3d()를 호출하여 x, y, z 샘플 포인트에 대한 의사 Vandermonde 행렬을 생성합니다. 여기서는 x, y, z의 최대 차수를 각각 2, 3, 4로 지정했습니다.
x_deg, y_deg, z_deg = 2, 3, 4
print('\nResult...\n', H.hermvander3d(x, y, z, [x_deg, y_deg, z_deg]))
전체 예제 코드
# numpy.array() 메서드로 동일한 형태의 점 좌표 배열 생성
import numpy as np
from numpy.polynomial import hermite as H
x = np.array([-2.+2.j, -1.+2.j])
y = np.array([0.+2.j, 1.+2.j])
z = np.array([2.+2.j, 3. + 3.j])
# 배열 출력
print('Array1...\n', x)
print('\nArray2...\n', y)
print('\nArray3...\n', z)
# 데이터 타입 확인
print('\nArray1 datatype...\n', x.dtype)
print('\nArray2 datatype...\n', y.dtype)
print('\nArray3 datatype...\n', z.dtype)
# 차원 확인
print('\nDimensions of Array1...\n', x.ndim)
print('\nDimensions of Array2...\n', y.ndim)
print('\nDimensions of Array3...\n', z.ndim)
# 형태(shape) 확인
print('\nShape of Array1...\n', x.shape)
print('\nShape of Array2...\n', y.shape)
print('\nShape of Array3...\n', z.shape)
# hermite.hermvander3d()로 의사 Vandermonde 행렬 생성
x_deg, y_deg, z_deg = 2, 3, 4
print('\nResult...\n', H.hermvander3d(x, y, z, [x_deg, y_deg, z_deg]))
실행 결과
Array1...
[-2.+2.j -1.+2.j]
Array2...
[0.+2.j 1.+2.j]
Array3...
[2.+2.j 3.+3.j]
Array1 datatype...
complex128
Array2 datatype...
complex128
Array3 datatype...
complex128
Dimensions of Array1...
1
Dimensions of Array2...
1
Dimensions of Array3...
1
Shape of Array1...
(2,)
Shape of Array2...
(2,)
Shape of Array3...
(2,)
Result...
[[ 1.000000e+00+0.000000e+00j 4.000000e+00+4.000000e+00j
-2.000000e+00+3.200000e+01j ...
7.600000e+02+2.160000e+03j ...
-2.064480e+06-1.182816e+07j]]
최종 결과 행렬은 샘플 포인트 수만큼의 행(여기서는 2행)과, 최대 차수 조합에 해당하는 열((2+1) × (3+1) × (4+1) = 60열)을 가진 복소수(complex128) 행렬입니다. 각 행에는 해당 좌표(x, y, z)에서 계산된 Hermite 다항식 기저 함수들의 값이 순서대로 저장되며, 첫 번째 열은 상수항 1+0j로 시작하는 것을 확인할 수 있습니다.