任意精度的多项式求解

Polynomial solving with arbitrary precision

我们一直在使用 GSL 求解多项式。但是,我们希望使用任意精度来求解多项式。我查看了 GMP 和 Boost 多精度库,但是,我找不到任何用浮点系数求解多项式的例程。

  1. 是否存在任何免费和开源的库来求解任意精度或非常高精度(小数点后> 200 位)的多项式?

  2. 是否可以使用 GSL 多项式求解程序并将数据类型更改为 GMP 任意精度?

  3. 使用标准算法之一,使用 GMP 任意精度数据类型编写多项式求解器是否更容易?

有不明白的地方欢迎大家评论

如果您知道一些求解多项式方程的算法(您会在许多教科书中找到这些算法),您可以对其进行改编和编码以使用 GMP。

由于 GMP 有一个 C++ class interface 通常看起来 operator + ... 等,您可以复制并通过一些现有的 C 代码,然后将其改编为 GMP。

  1. MPSolve provides a library to solve polynomials using multi-precision. Internally it uses GMP.

    可以观察到以下内容:

    • 可以以整数、有理数和 floating-point 任意精度进行计算。
    • 多项式的系数和各种其他选项通过文件作为输入给出。可以修改原始代码,直接从自己的程序中调用该函数。
    • 解可以以各种格式报告,例如指数、仅实数等
    • 求解器已针对多个标准多项式测试用例进行了验证并签出。
    • 求解器在内部使用通过 Linux 机器上的 /dev/random 播种的随机数。这会导致求解器在后续运行中运行缓慢的问题,因为在未来运行开始之前生成的 entropy 是不够的。这可以通过用标准 pseudo-random 生成器替换它来绕过。
    • 已尝试将求解器集成为一个库。但是,会发生严重的分段错误,难以调试。因此,通过调用其可执行文件来使用求解器。注意:这只是根据我的经验,希望可以以更好的方式完成。
    • 正在开发新的 C++ 版本,希望能解决这些问题。

  1. 分叉 GSL 多项式求解器以使用 GMP data-type 很乏味。如果编写了求解器(请参见第 3 条),将会更容易,并且代码将更易于控制和理解。

  1. , GMP and MPFR multi-precision libraries can be used and a polynomial solver can be written using standard polynomial solving techniques, such as Jenkins-Traub Algorithm 或基于 QR 技术的建议。

Boost C++ Libraries 提供使用 GMP 和 MPFR 的包装器,使用起来可能非常方便。

Arb 库具有使用任意精度和区间算术求解 real and complex 多项式的例程。