我希望 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
形成时,根的原始顺序丢失了,并且多项式的根(通常是复数)没有规范顺序反正。
我是一名优秀的程序员,十分优秀!