Chebyshev(체비셰프) 다항식의 의사 Vandermonde 행렬을 생성하려면 Python NumPy에서 제공하는 chebyshev.chebvander() 함수를 사용할 수 있습니다. 이 메서드는 지정된 차수(deg)와 샘플 포인트 (x, y)에 대한 의사 Vandermonde 행렬을 반환합니다.
여기서 매개변수 x와 y는 모두 동일한 형태(shape)를 가지는 점 좌표 배열입니다. 요소 중 하나라도 복소수가 포함되어 있으면 dtype은 complex128로, 그렇지 않으면 float64로 자동 변환됩니다. 스칼라 값은 1차원 배열로 변환되며, deg 매개변수에는 [x_deg, y_deg] 형태의 최대 차수 리스트를 전달합니다.
단계별 구현 방법
1단계: 필요한 라이브러리 임포트
먼저 NumPy와 chebyshev 모듈을 가져옵니다.
import numpy as np
from numpy.polynomial import chebyshev as C
2단계: 점 좌표 배열 생성
numpy.array() 메서드를 사용하여 동일한 형태의 점 좌표 배열을 생성합니다.
x = np.array([0.1, 1.4])
y = np.array([1.7, 2.8])
3단계: 배열 출력 및 속성 확인
생성된 배열과 데이터 타입, 차원, 형태를 확인합니다.
print("Array1...\n",x)
print("\nArray2...\n",y)print("\nArray1 datatype...\n",x.dtype)
print("\nArray2 datatype...\n",y.dtype)print("\nDimensions of Array1...\n",x.ndim)
print("\nDimensions of Array2...\n",y.ndim)print("\nShape of Array1...\n",x.shape)
print("\nShape of Array2...\n",y.shape)4단계: 의사 Vandermonde 행렬 생성
x의 최대 차수를 2, y의 최대 차수를 3으로 설정하여 chebvander2d() 함수를 호출합니다.
x_deg, y_deg = 2, 3
print("\nResult...\n",C.chebvander2d(x,y, [x_deg, y_deg]))
전체 예제 코드
import numpy as np
from numpy.polynomial import chebyshev as C
# numpy.array() 메서드로 동일한 형태의 점 좌표 배열 생성
x = np.array([0.1, 1.4])
y = np.array([1.7, 2.8])
# 배열 출력
print("Array1...\n",x)
print("\nArray2...\n",y)
# 데이터 타입 출력
print("\nArray1 datatype...\n",x.dtype)
print("\nArray2 datatype...\n",y.dtype)
# 두 배열의 차원 확인
print("\nDimensions of Array1...\n",x.ndim)
print("\nDimensions of Array2...\n",y.ndim)
# 두 배열의 형태 확인
print("\nShape of Array1...\n",x.shape)
print("\nShape of Array2...\n",y.shape)
# chebyshev.chebvander()로 Chebyshev 다항식의 의사 Vandermonde 행렬 생성
x_deg, y_deg = 2, 3
print("\nResult...\n",C.chebvander2d(x,y, [x_deg, y_deg]))
실행 결과
Array1...
[0.1 1.4]
Array2...
[1.7 2.8]
Array1 datatype...
float64
Array2 datatype...
float64
Dimensions of Array1...
1
Dimensions of Array2...
1
Shape of Array1...
(2,)
Shape of Array2...
(2,)
Result...
[[ 1.0000000e+00 1.7000000e+00 4.7800000e+00 1.4552000e+01
1.0000000e-01 1.7000000e-01 4.7800000e-01 1.4552000e+00
-9.8000000e-01 -1.6660000e+00 -4.6844000e+00 -1.4260960e+01]
[ 1.0000000e+00 2.8000000e+00 1.4680000e+01 7.9408000e+01
1.4000000e+00 3.9200000e+00 2.0552000e+01 1.1117120e+02
2.9200000e+00 8.1760000e+00 4.2865600e+01 2.3187136e+02]]
정리
위 예제에서 볼 수 있듯이, chebvander2d() 함수는 각 샘플 포인트 (x, y)에 대해 Chebyshev 다항식 T₀부터 지정된 차수까지의 값을 계산하여 행렬 형태로 반환합니다. 결과 행렬의 열 개수는 (x_deg + 1) × (y_deg + 1)이 되며, 본 예제에서는 3 × 4 = 12개의 열이 생성됩니다. 이러한 의사 Vandermonde 행렬은 다항식 회귀 분석, 함수 근사, 데이터 피팅 등 다양한 수치 계산 작업에서 유용하게 활용됩니다.