2

私は BigInteger クラスを使用して暗号化メソッドを実装する必要がある Java でプロジェクトを作成しています。

n が 200 の正方行列 nxn があり、行列式を計算する必要があります。サブマトリックスの行列式を使用してメソッドを実行しましたが、計算に時間がかかります。

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;
    } 

行列式を計算する非再帰的な方法はありますか?

前もって感謝します。

4

4 に答える 4

1

これをコメントとして投稿しましたが、これで実際に問題を解決できると思うので、回答としても投稿します。このパッケージを使用できます: http://math.nist.gov/javanumerics/jama/

于 2013-12-01T18:21:38.300 に答える