对于四次方程的解是否有开放的C实现:
我正在考虑实施法拉利解决方案。在Wikipedia上,我读到该解决方案仅对某些可能的系数符号组合具有计算稳定性。但是也许我很幸运……通过使用计算机代数系统分析求解并导出到C,我得到了一个务实的解决方案。但是,如果有经过测试的实现,我更喜欢使用它。我搜索一种快速方法,但不希望使用一般的根查找器。
我只需要真正的解决方案。
对于四次方程的解是否有开放的C实现:
我正在考虑实施法拉利解决方案。在Wikipedia上,我读到该解决方案仅对某些可能的系数符号组合具有计算稳定性。但是也许我很幸运……通过使用计算机代数系统分析求解并导出到C,我得到了一个务实的解决方案。但是,如果有经过测试的实现,我更喜欢使用它。我搜索一种快速方法,但不希望使用一般的根查找器。
我只需要真正的解决方案。
Answers:
我强烈建议不要使用封闭形式的解决方案,因为它们在数值上往往非常不稳定。您需要格外小心对待判别式和其他参数的评估方式和顺序。
经典示例是二次方程示例。将根计算为会使多项式陷入麻烦,因为自此之后,您在分子。您需要计算。
Higham在他的代表作《数值算法的准确性和稳定性》(第二版,SIAM)中使用直接搜索方法来查找三次多项式的系数,对于该多项式,经典的解析三次解给出的结果非常不准确。他给出的示例是。对于该多项式,根是很好地分离的,因此该问题不是病态的。但是,如果他使用分析方法计算根,并评估这些根中的多项式,则他会使用稳定的标准方法(伴随矩阵方法)获得的残差。,残基的顺序为。他提出了对该算法的轻微修改,但是即使那样,他仍然可以找到导致一组系数,这绝对不是一个好方法。请参阅上述书籍的p480-481。
在您的情况下,我将采用Bairstow的方法。它使用牛顿迭代的二次形式(然后解二次方)和放气的迭代组合。它很容易实现,甚至在网络上也有一些实现。
看到这些:
解决图形的四次方和三次方,最初发表于Graphics GemsV。原始代码在这里。另请参阅此和此。
c中的数字配方为近似二次方和三次方的实根提供了封闭形式的表达式,它们的精度可能很高。由于四次方程的代数求解涉及求解三次方程,然后求解两个二次方程,因此闭式四次方程可能不会有好的精度。