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