Python Numpy에서 다항식의 근을 계산하려면 polynomial.polyroots() 메서드를 사용합니다. 이 메서드는 다항식의 근을 담은 배열을 반환하며, 모든 근이 실수일 경우 결과도 실수형으로 반환되고, 하나라도 허수가 포함되면 복소수형으로 반환됩니다. 매개변수 c는 다항식의 계수를 담고 있는 1차원 배열입니다.
polyroots()의 동작 원리와 오차 특성
polyroots()는 동반 행렬(companion matrix)의 고유값(eigenvalue)을 계산하는 방식으로 근의 추정치를 구합니다. 이 과정에서 몇 가지 수치적 한계가 있습니다.
- 원점에서 멀리 떨어진 근: 복소 평면상 원점에서 멀리 떨어진 값에 대해서는 거듭제곱 급수가 수치적으로 불안정해져 큰 오차가 발생할 수 있습니다.
- 중근(multiple roots): 중복도가 1보다 큰 근 역시 상대적으로 더 큰 오차를 보입니다. 이러한 지점 근처에서 급수의 값이 근의 오차에 덜 민감하게 반응하기 때문입니다.
반면 원점 근처에 있는 고립된 단순근이라면 뉴턴 방법(Newton's method)을 몇 차례 반복 적용하여 정확도를 개선할 수 있습니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
from numpy.polynomial import polynomial as P
다항식의 근을 계산하려면 polynomial.polyroots() 메서드를 호출합니다. 여기서는 (-1, 0, 1), 즉 x² − 1 = 0의 계수 배열을 사용합니다.
print("Result (roots of a polynomial)...\n", P.polyroots((-1, 0, 1)))결과 배열의 데이터 타입(dtype)을 확인합니다.
print("\nType...\n", P.polyroots((-1, 0, 1)).dtype)결과 배열의 형태(shape)를 확인합니다.
print("\nShape...\n", P.polyroots((-1, 0, 1)).shape)전체 예제 코드
from numpy.polynomial import polynomial as P
# Python Numpy에서 다항식의 근을 계산하려면 polynomial.polyroots() 메서드를 사용합니다.
# 모든 근이 실수이면 결과도 실수형으로, 그렇지 않으면 복소수형으로 반환됩니다.
# 매개변수 c는 다항식 계수로 이루어진 1-D 배열입니다.
print("Result (roots of a polynomial)...\n", P.polyroots((-1, 0, 1)))
# 데이터 타입 확인
print("\nType...\n", P.polyroots((-1, 0, 1)).dtype)
# 형태(shape) 확인
print("\nShape...\n", P.polyroots((-1, 0, 1)).shape)실행 결과
Result (roots of a polynomial)... [-1. 1.] Type... float64 Shape... (2,)
위 실행 결과에서 볼 수 있듯이, x² − 1 = 0의 근인 −1과 1이 실수형(float64) 배열로 반환되었습니다. 두 개의 근이 존재하므로 배열의 shape은 (2,)입니다.