NumPy Poly () и корни () не являются обратимыми? - PullRequest
0 голосов
/ 08 сентября 2018

Я ожидал, что функции poly () и root () обратны друг другу. Однако это не совсем так:

# Polys coeffs
pol_c = np.poly([-1, 1, 1, 10]) # Get Polynomial coeffs for eqt with stated roots
# Roots from the poly equation
root_val = np.roots(pol_c)
# Roots from the poly equation, manually entered as integers
roots_v2 = np.roots([1,-11,9,11,-10])

print(pol_c)
print(root_val)
print(roots_v2)

Придает

[1. -11. 9. 11. -10.]

[10. + 0.0000000e + 00j -1. + 0.0000000e + 00j 1. + 9.6357437e-09j 1.-9.6357437e-09j]

[10. + 0.0000000e + 00j -1. + 0.0000000e + 00j 1. + 9.6357437e-09j 1.-9.6357437e-09j]

т. 3-й и 4-й корни (слегка) мнимые, а не реальные

Моей первой мыслью была ошибка с плавающей запятой, но учитывая, что root () выдает тот же ответ для float и int , что, похоже, не так. Кроме того, я ожидаю, что poly () даст нецелочисленные ответы, если точность с плавающей запятой ограничивает решения.

1 Ответ

0 голосов
/ 08 сентября 2018

Функции являются обратными друг другу, в пределах некоторых вычислительных ошибок (которые могут быть сложными) и вплоть до переупорядочения корней.

pol_c = np.poly([-1, 1, 1, 10]) 
root_val = np.roots(pol_c)
print(np.real_if_close(np.around(root_val, 6)))

печатает [10. -1. 1. 1.], что совпадает с тем, с которого мы начали, в другом порядке.

Конечно, порядок не должен быть тем же самым: первоначальный порядок корней теряется при формировании pol_c, и в любом случае не существует канонического порядка для корней многочленов (которые обычно являются сложными).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...