任意精度的多项式求解

时间:2016-01-10 08:23:52

标签: c++ gmp gsl polynomials

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

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

  2. 是否可以使用GSL多项式求解程序,数据类型的变化是GMP任意精度的变化?

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

  4. 如果不清楚,请随时发表评论。

2 个答案:

答案 0 :(得分:1)

如果你知道一些解决多项式方程的算法(并且你会在许多教科书中找到它们),你可以调整和编码它以使用GMP。

由于GMP的常规operator +C++ class interface,您可以复制并过去一些现有的C代码,然后将其调整为GMP。

答案 1 :(得分:1)

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

    可以观察到以下情况:

    • 计算可以用整数,有理和浮点任意精度完成。
    • 多项式的系数和各种其他选项通过文件输入。可以使用原始代码来直接从他们自己的程序中调用该函数。
    • 可以用各种格式报告解决方案,例如指数,只有真实等等。
    • 已针对多个标准多项式测试用例验证了求解器并进行了检验。
    • 解算器内部使用随机数,该随机数通过Linux机器上的/dev/random播种。这会导致解决方案在后续运行中运行缓慢的问题,因为在未来运行开始之前生成的entropy不够。这可以通过用标准伪随机生成器替换它来绕过。
    • 尝试将求解器集成为库。但是,会发生严重的分段错误,难以调试。因此,通过调用其可执行文件来使用解算器。注意:这只是我的经验,希望能以更好的方式完成。
    • 正在开发一个新的C ++版本,希望能解决这些问题。
    1. 将GSL多项式求解器分叉以使用GMP数据类型是很繁琐的。如果编写求解器(参见编号3),代码将更容易控制和理解。
      1. 根据answer中的建议,可以使用GMPMPFR多精度库,并且可以使用标准多项式求解技术编写多项式求解器,例如{{3}或基于QR的技术。
      2. Jenkins-Traub Algorithm提供使用GMP和MPFR的包装器,这可能非常方便使用。