Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy로 Chebyshev 다항식의 의사 Vandermonde 행렬 생성하기 – float 좌표 배열 활용법

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 행렬은 다항식 회귀 분석, 함수 근사, 데이터 피팅 등 다양한 수치 계산 작업에서 유용하게 활용됩니다.