在Java中查找多项式的根 [英] Finding roots of polynomial in Java
本文介绍了在Java中查找多项式的根的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要找到勒让德多项式的(近似的,数值的)解。我尝试了几个Java库,但没有我想要的东西(最接近的是commons-math,它甚至有代码用于在Laguerre Solver中找到解决方案,但不公开该方法)。是否有现有的解决方案或我需要实现自己的解决方案?
I need to find (approximate, numerical) solution to Legendre polynomial. I tried the several Java libraries but none have what I am looking for (the closest is commons-math which even has code for finding the solutions in Laguerre Solver but does not expose the method). Is there an existing solution or do I need to implement my own?
推荐答案
您可以使用 efficient-java-matrix-library
请查找以下示例示例
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;
}
}
这篇关于在Java中查找多项式的根的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文