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

Python NumPy로 복소수 점 좌표 배열을 활용해 Hermite_e 다항식의 의사 Vandermonde 행렬 생성하기

Python NumPy에서 hermite_e.hermevander2d() 함수를 사용하면 Hermite_e(에르미트_e) 다항식의 의사 Vandermonde 행렬을 손쉽게 생성할 수 있습니다. 이 함수는 계산 결과로 의사 Vandermonde 행렬을 반환합니다.

주요 매개변수는 다음과 같습니다.

  • x, y: 점 좌표 배열로, 두 배열은 모두 동일한 형태(shape)를 가져야 합니다. 요소 중 하나라도 복소수가 포함되어 있으면 dtype은 float64 또는 complex128로 자동 변환됩니다. 스칼라 값은 1차원 배열로 변환됩니다.
  • deg: 최대 차수를 나타내는 목록으로, [x_deg, y_deg] 형태로 지정합니다.

단계별 진행 과정

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np
from numpy.polynomial import hermite_e as H

numpy.array() 메서드를 사용하여 동일한 형태를 가진 점 좌표 배열을 생성합니다. 이번 예제에서는 복소수 값을 포함한 배열을 사용합니다.

x = np.array([-2.+2.j, -1.+2.j])
y = np.array([1.+2.j, 2.+2.j])

생성된 배열을 화면에 출력합니다.

print("Array1...\n", x)
print("\nArray2...\n", y)

배열의 데이터 타입(dtype)을 확인합니다.

print("\nArray1 datatype...\n", x.dtype)
print("\nArray2 datatype...\n", y.dtype)

두 배열의 차원(dimension)을 확인합니다.

print("\nDimensions of Array1...\n", x.ndim)
print("\nDimensions of Array2...\n", y.ndim)

두 배열의 형태(shape)를 확인합니다.

print("\nShape of Array1...\n", x.shape)
print("\nShape of Array2...\n", y.shape)

hermite_e.hermevander2d() 함수를 호출하여 Hermite_e 다항식의 의사 Vandermonde 행렬을 생성합니다. 여기서는 x 방향 최대 차수를 2, y 방향 최대 차수를 3으로 설정했습니다.

x_deg, y_deg = 2, 3
print("\nResult...\n", H.hermevander2d(x, y, [x_deg, y_deg]))

전체 예제 코드

import numpy as np
from numpy.polynomial import hermite_e as H

# numpy.array() 메서드로 동일한 형태의 점 좌표 배열 생성
x = np.array([-2.+2.j, -1.+2.j])
y = np.array([1.+2.j, 2.+2.j])

# 배열 출력
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)

# 형태(shape) 확인
print("\nShape of Array1...\n", x.shape)
print("\nShape of Array2...\n", y.shape)

# hermite_e.hermevander2d()로 의사 Vandermonde 행렬 생성
# 이 메서드는 의사 Vandermonde 행렬을 반환합니다.
x_deg, y_deg = 2, 3
print("\nResult...\n", H.hermevander2d(x, y, [x_deg, y_deg]))

실행 결과

Array1...
    [-2.+2.j -1.+2.j]

Array2...
    [1.+2.j 2.+2.j]

Array1 datatype...
complex128

Array2 datatype...
complex128

Dimensions of Array1...
1

Dimensions of Array2...
1

Shape of Array1...
(2,)

Shape of Array2...
(2,)

Result...
    [[ 1. +0.j   1.  +2.j  -4. +4.j -14. -8.j  -2. +2.j  -6. -2.j
      0. -16.j  44. -12.j  -1. -8.j  15. -10.j 36. +28.j -50.+120.j]
     [ 1.  +0.j  2.  +2.j  -1. +8.j -22. +10.j -1. +2.j  -6.  +2.j
     -15. -10.j   2. -54.j  -4. -4.j   0. -16.j 36. -28.j 128. +48.j]]

실행 결과에서 확인할 수 있듯이, 입력 배열에 복소수가 포함되어 있어 dtype이 자동으로 complex128로 변환되었으며, 각 점 좌표에 대해 지정된 최대 차수(x: 2차, y: 3차)에 따른 Hermite_e 다항식 기저 함수 값들이 행렬 형태로 계산되었습니다. 이러한 의사 Vandermonde 행렬은 다변수 Hermite_e 다항식의 최소제곱 피팅(fitting)이나 보간 문제를 해결할 때 유용하게 활용됩니다.