使用 mpmath 求简单多项式的根
Finding the roots of a simple polynomial with mpmath
我正在尝试使用 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 是否无法找到多项式的根?我该如何解决这个问题?
文档提到增加 extraprec
可能是实现收敛所必需的。由于根的多重性,您的示例就是这种情况。
>>> mpmath.polyroots(p, maxsteps=100, extraprec=110)
[mpf('0.0'), mpf('4.0'), mpf('4.0'), mpf('4.0')]
参数extraprec
表示在计算过程中多使用的位数,比较结果中需要的位数(默认为15,在[=13=中全局设置) ]).它的默认值为 10;将其增加到 110 可在 100 步内实现收敛。这实际上比在默认 extraprec
级别尝试(并且失败)找到具有 maxsteps=2000
的根花费的时间更少。
我正在尝试使用 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 是否无法找到多项式的根?我该如何解决这个问题?
文档提到增加 extraprec
可能是实现收敛所必需的。由于根的多重性,您的示例就是这种情况。
>>> mpmath.polyroots(p, maxsteps=100, extraprec=110)
[mpf('0.0'), mpf('4.0'), mpf('4.0'), mpf('4.0')]
参数extraprec
表示在计算过程中多使用的位数,比较结果中需要的位数(默认为15,在[=13=中全局设置) ]).它的默认值为 10;将其增加到 110 可在 100 步内实现收敛。这实际上比在默认 extraprec
级别尝试(并且失败)找到具有 maxsteps=2000
的根花费的时间更少。