numpy poly()和roots()不可逆吗?

时间:2018-09-08 17:11:49

标签: python numpy

我希望poly()和roots()函数彼此相反。但是,事实并非如此:

# 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]

即。第三和第四根是(略)虚构的,而不是真实的

我的第一个想法是浮点错误,但是考虑到roots()对于 float int 输入输出相同的答案,似乎并非如此。另外,如果浮点精度限制了求解的范围,我希望poly()给出非整数的答案。

1 个答案:

答案 0 :(得分:2)

这些函数彼此相反,在某些计算错误(可能很复杂)内,并且直到根的重新排序为止。

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形成时根的原始顺序会丢失,并且多项式的根(通常是复杂的)也没有规范的顺序。