任意精度多项式求解

问题描述 投票:0回答:3

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

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

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

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

有不明白的地方欢迎评论。

c++ gmp gsl polynomials
3个回答
1
投票

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

由于 GMP 有一个 C++ 类接口,具有通常的外观

operator +
...等等,您可以复制并粘贴一些现有的 C 代码,然后将其适应 GMP。


1
投票
  1. MPSolve 提供了一个使用多精度求解多项式的库。它在内部使用 GMP

可以观察到以下情况:

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

  1. 将 GSL 多项式求解器分叉为使用 GMP 数据类型非常繁琐。如果编写了求解器(请参见第 3 点),这将变得更加容易,并且代码将更易于控制和理解。

  1. answer中所建议,可以使用GMPMPFR多精度库,并且可以使用标准多项式求解技术(例如Jenkins-Traub算法或基于QR的技术)编写多项式求解器。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.