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

Python NumPy로 복소수 좌표 배열에서 라게르(Laguerre) 다항식의 2차원 의사 Vandermonde 행렬 생성하기

Python NumPy에서 laguerre.lagvander2d() 함수를 사용하면 라게르(Laguerre) 다항식의 의사 Vandermonde 행렬을 손쉽게 생성할 수 있습니다. 이 함수는 계산된 의사 Vandermonde 행렬을 반환하며, 반환되는 행렬의 형태(shape)는 x.shape + (deg + 1,)입니다. 여기서 마지막 인덱스는 해당 라게르 다항식의 차수를 나타냅니다. 반환 배열의 dtype은 입력값에 복소수가 포함되어 있는지 여부에 따라 float64 또는 complex128로 결정됩니다.

주요 매개변수

  • x, y: 점(point) 좌표 배열입니다. 요소 중 하나라도 복소수가 있으면 dtype은 complex128로 변환되고, 그렇지 않으면 float64로 변환됩니다. 만약 x가 스칼라 값이라면 자동으로 1차원 배열로 변환됩니다.
  • deg: [x_deg, y_deg] 형태의 최대 차수 목록입니다. 각 축에서 사용할 라게르 다항식의 최대 차수를 지정합니다.

구현 단계

1단계: 필요한 라이브러리 임포트

먼저 필요한 라이브러리를 가져옵니다.

import numpy as np
from numpy.polynomial import laguerre as L

2단계: 점 좌표 배열 생성

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

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

3단계: 배열 출력 및 속성 확인

생성된 배열과 데이터 타입, 차원, 형태를 확인합니다.

print("배열1...\n",x)
print("\n배열2...\n",y)

# 데이터 타입 확인
print("\n배열1 데이터타입...\n",x.dtype)
print("\n배열2 데이터타입...\n",y.dtype)

# 차원 확인
print("\n배열1의 차원...\n",x.ndim)
print("\n배열2의 차원...\n",y.ndim)

# 형태 확인
print("\n배열1의 형태...\n",x.shape)
print("\n배열2의 형태...\n",y.shape)

4단계: 의사 Vandermonde 행렬 생성

laguerre.lagvander2d() 함수를 호출하여 라게르 다항식의 의사 Vandermonde 행렬을 생성합니다. 여기서는 x축 최대 차수를 2, y축 최대 차수를 3으로 지정했습니다.

x_deg, y_deg = 2, 3
print("\n결과...\n",L.lagvander2d(x,y, [x_deg, y_deg]))

전체 예제 코드

import numpy as np
from numpy.polynomial import laguerre as L

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

# 배열 출력
print("배열1...\n",x)
print("\n배열2...\n",y)

# 데이터 타입 확인
print("\n배열1 데이터타입...\n",x.dtype)
print("\n배열2 데이터타입...\n",y.dtype)

# 두 배열의 차원 확인
print("\n배열1의 차원...\n",x.ndim)
print("\n배열2의 차원...\n",y.ndim)

# 두 배열의 형태 확인
print("\n배열1의 형태...\n",x.shape)
print("\n배열2의 형태...\n",y.shape)

# laguerre.lagvander2d()로 라게르 다항식의 의사 Vandermonde 행렬 생성
x_deg, y_deg = 2, 3
print("\n결과...\n",L.lagvander2d(x,y, [x_deg, y_deg]))

실행 결과

배열1...
    [-2.+2.j -1.+2.j]

배열2...
    [1.+2.j 2.+2.j]

배열1 데이터타입...
complex128

배열2 데이터타입...
complex128

배열1의 차원...
1

배열2의 차원...
1

배열1의 형태...
(2,)

배열2의 형태...
(2,)

결과...
    [[ 1.   +0.j   0.          -2.j
      -2.5  -2.j  -4.66666667  +0.33333333j
       3.   -2.j  -4.          -6.j
      -11.5 -1.j  -13.33333333 +10.33333333j
       5.   -8.j  -16.         -10.j
      -28.5 +10.j -20.66666667 +39.j ]
     [  1.   +0.j  -1.          -2.j
      -3.    +0.j  -2.33333333  +3.33333333j
       2.    -2.j  -6.          -2.j
      -6.    +6.j   2.          +11.33333333j
       1.5  -6.j -13.5  +3.j
      -4.5 +18.j  16.5 +19.j ]]

위 실행 결과에서 볼 수 있듯이, 입력 배열의 요소가 복소수이므로 데이터 타입은 complex128로 변환되었으며, 최종적으로 생성된 의사 Vandermonde 행렬은 (2,) + (2+1) * (3+1) 구조에 따라 각 점마다 12개의 열을 가진 2×12 형태의 행렬로 반환됩니다.