【问题标题】:Python: my polynomial coefficients are off by a factor of 10Python:我的多项式系数相差 10 倍
【发布时间】:2016-11-17 01:40:01
【问题描述】:

我正在使用 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,它会起作用,但我不明白为什么我应该这样做。我犯了一个明显的错误吗?谢谢!

【问题讨论】:

  • 公式未显示。你能解决这个问题吗?
  • 您正在构造具有特定根的多项式。如果将它的系数乘以任意数字,根将保持不变。
  • @Jonathan 你不应该得到 10*x**5,上面的答案是正确的,你可以通过插入所有根并查看每个 x、@987654329 来验证这一点@。虽然10 * p(x) 也是如此,但没有理由这样做。
  • @EliSadoff 哦!我现在明白了:我不知道为什么我没有意识到这个明显的错误。作者选择了这些系数,但我的表格是系数减少最多的。谢谢!!!
  • 不用担心。我是一名科学计算专家,所以我喜欢在这些方面提供帮助。

标签: python python-3.x math polynomial-math


【解决方案1】:

虽然10x**5 + ... 是正确的,但10 * p(x) 并不是真正需要的。你现在得到的答案也很好,你可以测试roots中的每个rp(r)0

【讨论】:

  • 我测试了每个根。正如本书警告我的那样,由于浮点舍入错误,我得到的数字非常小,接近于零。如果可能的话,您有首选的技术来纠正这个问题吗?
  • @Johnathan 您通常会遇到浮点错误。我一般设置1e-12abs(p(r)) < 1e-12的容差,你应该没问题。阅读更多关于它的信息here
【解决方案2】:

x**5 是正确的。

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

【讨论】:

  • 非常感谢您的帮助!
猜你喜欢
  • 2015-01-11
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多