gnu科学库(GSL)三次多项式的结果差异

时间:2015-09-09 06:02:57

标签: c++ polynomial-math gsl wolframalpha polynomial-approximations

GSL polynomial solver给出了错误的结果。我试图使用 GSL三次多项式求解器求解以下多项式:

x ^ 3-1.96848e20 x ^ 2 + 9.07605e28 x + 9.07605e28 = 0

Wolframalpha results 是:

  • -1
  • 4.61069e + 8
  • 1.96848e + 20

我的计划中,结果是:

  • 2.30531e + 08
  • 2.30531e + 08
  • 1.96848e + 20

我使用的代码

   #include <iostream>
    #include <gsl/gsl_poly.h>

    using namespace std;

    int main() {
      double result[3]={0,0,0};
      gsl_poly_solve_cubic(-1.96848e20,9.07605e28,9.07605e28, &result[0], &result[1], &result[2]);
      cout << result[0] << endl;
      cout << result[1] << endl;
      cout << result[2] << endl;
      return 0;
    }

可能出现什么问题?

编辑:实际上,Wolframalpha也给出了奇怪的答案

更新:两个Wolframalpha都错了(更接近正确答案)并且我的代码错了。

这是Python(Numpy库)中的相同解决方案

In [11]: np.roots(p)
Out[11]: array([  1.96848000e+20,   4.61068948e+08,  -9.99999998e-01])

1 个答案:

答案 0 :(得分:1)

在这种情况下,GSL中使用的数值方法不够准确。

使用例如Jenkins-Traub算法(代码here