Finding polynomial roots in Java

I need to find the (approximate, numerical) solution of the Legendre polynomial. I tried several Java libraries, but I don’t have what I'm looking for (the closest is commons-math, which even has code for finding solutions in Laguerre Solver but doesn’t disclose the method). Is there an existing solution or do I need to implement my own?

+4
source share
3 answers

You can use efficient-java-matrix-library

Below is an example of an example for the same

public class PolynomialRootFinder { /** * <p> * 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. * </p> * * @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<DenseMatrix64F> 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; } } 
+7
source

Starting with version 3.1 Commons Math supports the search for all the complex roots of a polynomial function.

See LaguerreSolver # solveAllComplex

+1
source

commons math has a reasonable polynomial 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); 
0
source

All Articles