gpt4 book ai didi

python - 使用 mpmath 求简单多项式的根

转载 作者:太空宇宙 更新时间:2023-11-04 03:29:48 24 4
gpt4 key购买 nike

我正在尝试使用 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,在中全局设置mpmath.mp.dps).它的默认值为 10;将其增加到 110 可在 100 步内实现收敛。这实际上比在默认 extraprec 级别尝试(并且失败)使用 maxsteps=2000 查找根花费的时间更少。

关于python - 使用 mpmath 求简单多项式的根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com