Java中的复系数多项式求根

Java中的复系数多项式求根,java,matrix,polynomial-math,complex-numbers,Java,Matrix,Polynomial Math,Complex Numbers,我试图找到一种在Java中计算具有复数系数的多项式的根的方法(即,相当于在MATLAB中用roots()轻松实现的方法) 我已经准备好重新编写一个根查找算法,该算法构建伴随矩阵,然后使用广义特征值分解来查找根,但为此,我需要一个处理复数矩阵运算的库 我浏览了一会儿,似乎没有什么令人信服的东西,我觉得这很奇怪。那么,我想问你: 您知道一个(稳定的)Java库,它对由复系数定义的多项式执行根查找吗 您知道一个(稳定的)Java库,它对复数矩阵执行evd、svd、逆等操作吗 注意:我已经看过JAMA(

我试图找到一种在Java中计算具有复数系数的多项式的根的方法(即,相当于在MATLAB中用roots()轻松实现的方法)

我已经准备好重新编写一个根查找算法,该算法构建伴随矩阵,然后使用广义特征值分解来查找根,但为此,我需要一个处理复数矩阵运算的库

我浏览了一会儿,似乎没有什么令人信服的东西,我觉得这很奇怪。那么,我想问你:

  • 您知道一个(稳定的)Java库,它对由复系数定义的多项式执行根查找吗

  • 您知道一个(稳定的)Java库,它对复数矩阵执行evd、svd、逆等操作吗

  • 注意:我已经看过JAMA(不处理复数)、Michael Thomas Flanagan的Java科学库(不再可用)、colt(似乎不处理复数)、高效Java矩阵库(也不处理复数)、DDogleg Numerics(不处理带复数系数的多项式)、JScience(不清楚是否有evd)和Apache的通用数学(不清楚是否允许复数矩阵,如果允许,是否提供evd)。

    也适用于复数系数,不依赖矩阵计算

    实现起来很简单,你可以用谷歌搜索一个实现(Stackoverflow禁止我链接我找到的那个),或者自己做一个。您可以将库用于复杂的数据类型,而不是算法本身


    编辑:我不认为你也需要evd,更不用说我提到的jscience是一个做复杂矩阵数学的选项。

    如果你想保持它真实,请使用
    Bairstow方法。如果多项式的阶数为奇数,首先使用
    牛顿法
    找到一个实根,并将多项式的阶数降为偶数。这避免了Bairstow方法的奇点,即它收敛到一个以无穷大为一根的二次多项式。在通常的地方可以找到高质量的信息。有些是你自己写的或编辑的

    确定内根半径r,并使用z^2-2r*cos(φ)*z+r^2和随机角度φ作为拜尔斯托方法的初始因子。它在每一步中产生一个二次因子,总是在实数系数中,包含一对实数根或一对共轭复数根


    检查每一步的收敛速度,必要时用不同的初始点重新启动。通缩后找到新的根,并以原始多项式和因子为起点执行该方法来磨光根或二次因子。

    非常感谢!这个方法确实很容易实现,我也得到了很好的结果——问题解决了。