2

我正在尝试使用mpmath.polyroots整数系数来查找简单多项式的根,该多项式x*(x-4)**3在展开时具有 的系数向量[1, -12, 48, 64, 0]。以下代码失败:

import mpmath
p = [  1, -12,  48, -64,   0]
print mpmath.polyroots(p,maxsteps=2000)

出现错误:

Traceback (most recent call last):
  File "poly.py", line 3, in <module>
    print mpmath.polyroots(p,maxsteps=2000)
  File "/usr/local/lib/python2.7/dist-packages/mpmath/calculus/polynomials.py", line 188, in polyroots
    % maxsteps)
mpmath.libmp.libhyper.NoConvergence: Didn't converge in maxsteps=2000 steps.

增加步数没有帮助。预期的答案显然是[0,4,4,4]

如果存在多重性,mpmath 是否无法找到多项式的根?我该如何解决这个问题?

4

1 回答 1

4

该文档提到,extraprec可能需要增加以实现收敛。由于根的多重性,您的示例就是这种情况。

>>> mpmath.polyroots(p, maxsteps=100, extraprec=110)
[mpf('0.0'), mpf('4.0'), mpf('4.0'), mpf('4.0')]

extraprec参数表示在计算过程中要使用的额外位数,比较结果中需要的位数(默认为15,在 中全局设置mpmath.mp.dps)。其默认值为 10;将其增加到 110 可以在 100 步内实现收敛。这实际上比尝试(和失败)maxsteps=2000在默认extraprec级别找到根所需的时间更少。

于 2016-04-24T19:32:20.463 回答