+1 Daumen
3,1k Aufrufe

Die Aufgabe lautet: Schreiben Sie eine Funktion, die die Determinante einer Matrix (codiert durch ein zweidimensionales int-Array) berechnet und zurückgibt (int).

Avatar von

1 Antwort

+2 Daumen
 
Beste Antwort

Halte Dich bei der Implementierung an den Laplaceschen Entwicklungssatz. Dieser beschreibt im Prinzip die algorithmische Logik, die innerhalb des Funktionsrumpfes gekapselt ist:

 public static int det(final int[][] matrix) {

if (matrix.length != matrix[0].length) {
throw new IllegalArgumentException("Die Matix ist nicht quadratisch!");
}

    int n = matrix.length;

    int[][] tmp = new int[matrix.length][matrix[0].length];

    int det = 0;

    if (matrix.length == 1) {
        det = matrix[0][0];
        return det;
    }

    if (n == 2) {
        det = (matrix[0][0] * matrix[1][1]) - (matrix[0][1] * matrix[1][0]);
        return det;
    }

    for (int i = 0; i < n; i++) {
    tmp = new int[n - 1][n - 1];

        for (int j = 1; j < n; j++) {
            for (int k = 0; k < n; k++) {
                if (k < i) {
                   tmp[j - 1][k] = matrix[j][k];
                } else if (k > i) {
           tmp[j - 1][k - 1] = matrix[j][k];
            }
       }
    }

    // Rekursion
    det += (matrix[0][i] * Math.pow(-1, i) * det(tmp));
    }
    return det;
}

Wenn Du lieber mit double-Werten rechnen willst, was in meinen Augen mehr Sinn ergibt, musst Du lediglich die Datentypen tauschen und in der Zeile

det += (matrix[0][i] * Math.pow(-1, i) * det(tmp));

\(i\) auf int casten. Also:

det += (matrix[0][i] * Math.pow(-1, (int) i) * det(tmp));
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community