我期望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()会给出非整数的答案。

最佳答案

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

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

08-24 22:21