四次方程的解

计算科学 多项式 非线性方程
2021-12-18 03:19:02

四次方程的解是否有一个开放的 C 实现:

ax+bx³+cx²+dx+e=0

我正在考虑实施法拉利的解决方案。在维基百科上,我读到该解决方案仅对系数的一些可能符号组合是计算稳定的。但也许我很幸运......我通过使用计算机代数系统分析求解并导出到 C 得到了一个实用的解决方案。但如果有一个经过测试的实现,我更愿意使用它。我搜索了一种快速方法,并且不喜欢使用一般的根查找器。

我只需要真正的解决方案。

3个回答

我强烈建议不要使用封闭形式的解决方案,因为它们往往在数值上非常不稳定。在评估判别式和其他参数的方式和顺序上,您需要格外小心。

经典示例是二次方程的示例。将根计算为将使您遇到多项式的麻烦,其中从那时起您在分子。您需要计算ax2+bx+c=0

x1,2=b±b24ac2a
b4ac
x1=(b+sign(b)b24ac)2a;x2=ca1x1

海厄姆在他的杰作“数值算法的准确性和稳定性”(第 2 版,SIAM)中使用直接搜索方法来查找三次多项式的系数,而经典三次解析解给出的结果非常不准确。他给出的例子是对于这个多项式,根是完全分离的,因此问题不是病态的。但是,如果他使用解析方法计算根,并评估这些根中的多项式,他会在使用稳定标准方法(伴随矩阵方法)的同时 ) 的余数,余数为[a,b,c]=[1.732,1,1.2704]O(102)O(1015). 他提议对算法稍作修改,但即便如此,他仍能找到一组导致的系数,这绝对是不好的。参见上述书籍的 p480-481。O(1011)

在你的情况下,我会应用Bairstow 的方法它在二次形式上使用牛顿迭代(然后求解二次根)和通货紧缩的迭代组合。它很容易实现,甚至在网络上也有一些实现。

见这些:

c 中的数值配方为二次和三次的实根提供了封闭形式的表达式,可能具有不错的精度。由于四次的代数解涉及求解三次然后求解两个二次,因此具有良好精度的封闭形式的四次可能不是不可能的。