체비셰프(Chebyshev) 다항식과 x, y, z 샘플 포인트를 이용해 의사 Vandermonde(반데르몬드) 행렬을 생성하려면 Python NumPy에서 제공하는 chebyshev.chebvander3d() 함수를 사용하면 됩니다. 이 메서드는 지정한 차수(deg)와 샘플 포인트 (x, y, z)에 대한 의사 Vandermonde 행렬을 반환합니다.
chebvander3d() 함수의 매개변수
x, y, z는 점 좌표 배열로, 세 배열은 모두 동일한 형태(shape)를 가져야 합니다. 데이터 타입(dtype)은 요소 중 하나라도 복소수가 있으면 complex128로, 그렇지 않으면 float64로 자동 변환됩니다. 스칼라 값이 입력되면 1차원 배열로 변환됩니다.
deg는 각 축별 최대 차수를 [x_deg, y_deg, z_deg] 형태의 리스트로 지정합니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np from numpy.polynomial import chebyshev as C
numpy.array() 메서드를 사용하여 모두 같은 형태의 점 좌표 배열을 생성합니다.
x = np.array([1, 2]) y = np.array([3, 4]) z = np.array([5, 6])
생성된 배열들을 출력해 확인합니다.
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)배열의 차원(dimension)을 확인합니다.
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)이제 체비셰프 다항식과 x, y, z 샘플 포인트로 의사 Vandermonde 행렬을 생성하기 위해 chebyshev.chebvander3d() 함수를 호출합니다.
x_deg, y_deg, z_deg = 2, 3, 4
print("\nResult...\n",C.chebvander3d(x,y, z, [x_deg, y_deg, z_deg]))전체 예제 코드
import numpy as np
from numpy.polynomial import chebyshev as C
# numpy.array() 메서드로 동일한 형태의 점 좌표 배열 생성
x = np.array([1, 2])
y = np.array([3, 4])
z = np.array([5, 6])
# 배열 출력
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)
# 체비셰프 다항식과 x, y, z 샘플 포인트의 의사 Vandermonde 행렬 생성
# 이 메서드는 deg 차수와 샘플 포인트 (x, y, z)에 대한 의사 Vandermonde 행렬을 반환합니다.
x_deg, y_deg, z_deg = 2, 3, 4
print("\nResult...\n",C.chebvander3d(x,y, z, [x_deg, y_deg, z_deg]))실행 결과
Array1...
[1 2]
Array2...
[3 4]
Array3...
[5 6]
Array1 datatype...
int64
Array2 datatype...
int64
Array3 datatype...
int64
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.0000000e+00 5.0000000e+00 4.9000000e+01 4.8500000e+02 4.8010000e+03
3.0000000e+00 1.5000000e+01 1.4700000e+02 1.4550000e+03 1.4403000e+04
1.7000000e+01 8.5000000e+01 8.3300000e+02 8.2450000e+03 8.1617000e+04
9.9000000e+01 4.9500000e+02 4.8510000e+03 4.8015000e+04 4.7529900e+05
1.0000000e+00 5.0000000e+00 4.9000000e+01 4.8500000e+02 4.8010000e+03
3.0000000e+00 1.5000000e+01 1.4700000e+02 1.4550000e+03 1.4403000e+04
1.7000000e+01 8.5000000e+01 8.3300000e+02 8.2450000e+03 8.1617000e+04
9.9000000e+01 4.9500000e+02 4.8510000e+03 4.8015000e+04 4.7529900e+05
1.0000000e+00 5.0000000e+00 4.9000000e+01 4.8500000e+02 4.8010000e+03
3.0000000e+00 1.5000000e+01 1.4700000e+02 1.4550000e+03 1.4403000e+04
1.7000000e+01 8.5000000e+01 8.3300000e+02 8.2450000e+03 8.1617000e+04
9.9000000e+01 4.9500000e+02 4.8510000e+03 4.8015000e+04 4.7529900e+05]
[1.0000000e+00 6.0000000e+00 7.1000000e+01 8.4600000e+02 1.0081000e+04
4.0000000e+00 2.4000000e+01 2.8400000e+02 3.3840000e+03 4.0324000e+04
3.1000000e+01 1.8600000e+02 2.2010000e+03 2.6226000e+04 3.1251100e+05
2.4400000e+02 1.4640000e+03 1.7324000e+04 2.0642400e+05 2.4597640e+06
2.0000000e+00 1.2000000e+01 1.4200000e+02 1.6920000e+03 2.0162000e+04
8.0000000e+00 4.8000000e+01 5.6800000e+02 6.7680000e+03 8.0648000e+04
6.2000000e+01 3.7200000e+02 4.4020000e+03 5.2452000e+04 6.2502200e+05
4.8800000e+02 2.9280000e+03 3.4648000e+04 4.1284800e+05 4.9195280e+06
7.0000000e+00 4.2000000e+01 4.9700000e+02 5.9220000e+03 7.0567000e+04
2.8000000e+01 1.6800000e+02 1.9880000e+03 2.3688000e+04 2.8226800e+05
2.1700000e+02 1.3020000e+03 1.5407000e+04 1.8358200e+05 2.1875770e+06
1.7080000e+03 1.0248000e+04 1.2126800e+05 1.4449680e+06 1.7218348e+07]]정리
NumPy의 numpy.polynomial.chebyshev.chebvander3d() 함수는 3차원 체비셰프 다항식 기저 함수 값을 계산하여 의사 Vandermonde 행렬을 손쉽게 만들어 줍니다. 반환되는 행렬의 열 개수는 (x_deg + 1) × (y_deg + 1) × (z_deg + 1)이며, 본 예제에서는 차수가 각각 2, 3, 4이므로 3 × 4 × 5 = 60개의 열을 가진 행렬이 생성됩니다. 이러한 의사 Vandermonde 행렬은 다항식 최소제곱 피팅(fitting)이나 보간 문제를 풀 때 유용하게 활용됩니다.