gpt4 book ai didi

python - 当 poly1d 是非常大的整数时,它们会给出错误的系数

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:46 25 4
gpt4 key购买 nike

我在 ubuntu 16.04.2 LTS 和 NumPy 1.12.1 中使用 python 3.5.2。当我使用 poly1d 函数获取系数时,计算出现错误:

>>> from numpy import poly1d
>>> from math import fabs
>>> pol = poly1d([2357888,459987,78123455],True)
>>>[int(x) for x in pol.coeffs]
[1, -80941330, 221226728585581, -84732529566356586496]

如您在此列表中所见,最后一个元素不正确。当我使用 Wolfram Alpha 构建多项式时,我得到:

x^3 - 80941330 x^2 + 221226728585581 x - 84732529566356580480

使用 poly1d 时最后一个系数不同(第一个系数以 ...496 结尾,另一个以 ...480 结尾)。我必须假设正确的是最后一个计算(由 WolframAlpha 制作)。

这是一个错误还是有什么我没有考虑到的?我用绝对值低的根进行了探索;在这种情况下,计算是正确的。但是当我使用“大根”时,差异就很明显了。

最佳答案

正如 Warren Weckesser 所说,这是一个精度问题。但它可以通过将根数组声明为对象类型来解决。通过这种方式,您可以利用 Python 的大整数或 mpmath 对象提供的更高精度。 NumPy 够贴心not to coerce them to double precision .示例:

import numpy as np
roots = np.array([2357888, 459987, 78123455], dtype=object)
pol = np.poly1d(roots, True)
print(pol.coeffs)

输出:[1 -80941330 221226728585581 -84732529566356580480]

关于python - 当 poly1d 是非常大的整数时,它们会给出错误的系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189278/

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