java - Java巨矩阵的行列式

标签 java matrix biginteger determinants non-recursive

我正在用 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/

相关文章:

Java拖动 Sprite 从头开始重绘

java - 我如何检查 Java 中 BigInteger 的每个数字?

java - 计算两个数组列表之间公共(public)元素的数量 - Java

c - 仅包含 "* "和 "SPACE "的输入随机矩阵

linux - 在 Octave 音程中,printf 给出奇怪的错误

使用指针的 C 矩阵乘法

java - 我在执行解密时遇到基数超出范围异常

java - 如何将 Java long 转换为 *unsigned* base-X 字符串(并返回)?

java - 具有工作连接和正确 SQL 语句的空结果集

java - Eclipse 中 win32com.dll 错误