다항식의 근(해)을 계산하려면 Python NumPy에서 제공하는 chebyshev.chebroots() 메서드를 사용할 수 있습니다. 이 메서드는 급수의 근들을 담은 배열을 반환하며, 모든 근이 실수일 경우 결과도 실수 배열로, 그렇지 않으면 복소수 배열로 출력됩니다.
chebroots() 메서드의 동작 원리
매개변수 c는 다항식의 계수를 담고 있는 1차원 배열입니다. 메서드는 이 계수들로 구성된 체비쇼프 급수의 근을 추정하여 배열 형태로 돌려줍니다.
근의 추정값은 컴패니언 행렬(companion matrix)의 고유값을 계산하는 방식으로 얻어집니다. 다만 몇 가지 유의할 점이 있습니다.
- 복소평면의 원점에서 멀리 떨어진 근: 해당 값에 대해 급수가 수치적으로 불안정해지므로 오차가 커질 수 있습니다.
- 중근(중복도 1보다 큰 근): 그 지점 근처에서 급수의 값이 근의 오차에 상대적으로 둔감하기 때문에 더 큰 오차를 보입니다.
- 원점 근처의 고립된 단순근: 뉴턴 방법(Newton's method)을 몇 번 반복 적용하면 정확도를 개선할 수 있습니다.
구현 단계
1단계: 필요한 라이브러리 임포트
from numpy.polynomial import chebyshev as C
2단계: chebroots() 메서드로 근 계산
허수 단위 j(complex(0, 1))를 활용해 복소수 계수 배열을 만든 뒤 근을 계산합니다.
j = complex(0,1)
print("Result (roots)...\n",C.chebroots((-j, j)))3단계: 결과의 데이터 타입 확인
print("\nType...\n",C.chebroots((-j, j)).dtype)4단계: 결과의 배열 형태(shape) 확인
print("\nShape...\n",C.chebroots((-j, j)).shape)전체 예제 코드
from numpy.polynomial import chebyshev as C
# 다항식의 근을 계산하려면 Python Numpy의 chebyshev.chebroots() 메서드를 사용합니다.
# 모든 근이 실수면 결과도 실수 배열로, 아니면 복소수 배열로 반환됩니다.
# 매개변수 c는 계수를 담은 1차원 배열입니다.
j = complex(0,1)
print("Result (roots)...\n",C.chebroots((-j, j)))
# 데이터 타입 확인
print("\nType...\n",C.chebroots((-j, j)).dtype)
# 배열 형태 확인
print("\nShape...\n",C.chebroots((-j, j)).shape)실행 결과
Result (roots)...
[1.+0.j]
Type...
complex128
Shape...
(1,)위 예제에서 계수 (-j, j)에 대한 체비쇼프 급수의 근은 [1.+0.j], 즉 실수부가 1인 복소수 하나로 계산되었습니다. 결과의 데이터 타입은 complex128이며, 근이 하나뿐이므로 배열의 shape는 (1,)입니다.