Python:我的多项式系数被减少了10倍

Python:我的多项式系数被减少了10倍,python,python-3.x,math,polynomial-math,Python,Python 3.x,Math,Polynomial Math,我正在用python学习科学计算。在本练习中,我将使用多项式的根和以下公式生成一个多项式: 以下是我的实现: def poly(x,roots): #Pass real and/or complex roots x = symbols(x) f = 1 for r in roots: f = f*(x - r) return expand(f) 当我测试它时: from sympy import

我正在用python学习科学计算。在本练习中,我将使用多项式的根和以下公式生成一个多项式:

以下是我的实现:

def poly(x,roots):            #Pass real and/or complex roots

    x = symbols(x)
    f = 1            
    for r in roots:
        f = f*(x - r)

    return expand(f)
当我测试它时:

from sympy import expand
poly('x',[(-1/2), 5, (21/5), (-7/2) + (1/2)*sqrt(73), (-7/2) - (1/2)*sqrt(73)])
我得到:

x**5 - 1.7*x**4 - 50.5*x**3 + 177.5*x**2 - 24.8999999999999*x - 63.0
但我应该得到:

10*x**5 - 17.0*x**4 - 505.0*x**3 + 1775.0*x**2 - 248.999999999999*x - 630.0

因此,一切都是10倍。如果我设置
f=10
,它会工作,但我不明白为什么要这样做。我是不是犯了一个明显的错误?谢谢大家!

x**5
正确


正如您在公式中所看到的,它没有系数。

10x**5+…
是正确的,即
10*p(x)
,这并不是真正需要的。您现在得到的答案也很好,您可以测试
roots
中的每个
r
p(r)
0

公式没有显示出来。你能解决这个问题吗?你正在构造具有特定根的多项式。如果将其系数乘以任何数字,根将保持不变。@Jonathan你不应该得到10*x**5,上面的答案是正确的,你可以通过插入所有根并查看每个
x
p(x)=0来验证这一点。虽然
10*p(x)
也是如此,但没有理由这样做。@EliSadoff哦!我现在明白了:我不知道为什么我没有意识到这个明显的错误。作者选择了那些系数,但我有一个最简化系数的形式。非常感谢。别担心。我是一个从事科学计算的人,所以我喜欢帮助解决这个问题。非常感谢你的帮助!我测试了每个根。正如书中警告我的那样,由于浮点舍入错误,我得到非常小的接近零的数字。如果可能的话,你有没有更好的方法来纠正这个问题?@Johnathan你通常会遇到浮点错误。我通常将公差设置为
1e-12
abs(p(r))<1e-12
,您应该可以。阅读更多关于它的信息。