在Java中查找多项式的根

我需要找到勒让德多项式的(近似的,数值的)解。 我尝试了几个Java库,但没有我想要的东西(最接近的是commons-math,它甚至有代码用于在Laguerre Solver中找到解决方案,但不公开该方法)。 有现成的解决方案还是我需要实现自己的解决方案?

您可以使用高效的java-matrix-library

请查看以下示例示例

public class PolynomialRootFinder { /** * 

* Given a set of polynomial coefficients, compute the roots of the polynomial. Depending on * the polynomial being considered the roots may contain complex number. When complex numbers are * present they will come in pairs of complex conjugates. *

* * @param coefficients Coefficients of the polynomial. * @return The roots of the polynomial */ public static Complex64F[] findRoots(double... coefficients) { int N = coefficients.length-1; // Construct the companion matrix DenseMatrix64F c = new DenseMatrix64F(N,N); double a = coefficients[N]; for( int i = 0; i < N; i++ ) { c.set(i,N-1,-coefficients[i]/a); } for( int i = 1; i < N; i++ ) { c.set(i,i-1,1); } // use generalized eigenvalue decomposition to find the roots EigenDecomposition evd = DecompositionFactory.eigGeneral(N, false); evd.decompose(c); Complex64F[] roots = new Complex64F[N]; for( int i = 0; i < N; i++ ) { roots[i] = evd.getEigenvalue(i); } return roots; } }

从3.1版开始,Commons Math支持查找多项式函数的所有复杂根。

请参阅LaguerreSolver#solveAllComplex

commons math有多项式的合理API

  // -4 + 3 x + x^2 PolynomialFunction polynomial = new PolynomialFunction(new double[]{ -4, 3, 1}); LaguerreSolver laguerreSolver = new LaguerreSolver(); double root = laguerreSolver.solve(100, polynomial, -100, 100); System.out.println("root = " + root);