我正在用 Java 制作一个项目,我必须使用 BigInteger 类来实现加密方法。
我有方阵 nxn,其中 n 可以是 200,我需要计算行列式。我使用子矩阵的行列式完成了该方法,但它需要永远计算。
public BigInteger determinant(Matrix matrix){
if (matrix.getColumns()!=matrix.getRows()){
System.out.println("The matrix is not square");
return BigInteger.valueOf(-1);
}
if (matrix.getColumns() == 1) {
return matrix.getMatrix()[0][0];
}
if (matrix.getRows()==2) {
return ((matrix.getValueAt(0, 0).multiply(matrix.getValueAt(1, 1)))).subtract(( matrix.getValueAt(0, 1).multiply(matrix.getValueAt(1, 0))));
}
BigInteger sum = BigInteger.valueOf(0);
for (int i=0; i<matrix.getColumns(); i++) {
sum = sum.add(this.changeSign(BigInteger.valueOf(i)).multiply(matrix.getValueAt(0, i)).multiply(determinant(createSubMatrix(matrix, 0, i))));// * determinant(createSubMatrix(matrix, 0, i));
}
return sum;
}
有没有一种非递归的方法来计算行列式?
提前致谢。
最佳答案
我已将其作为评论发布,但我认为这实际上可以解决您的问题,因此我也将其作为答案发布。 您可以使用这个包:http://math.nist.gov/javanumerics/jama/
关于java - Java巨矩阵的行列式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20315396/