0 Daumen
94 Aufrufe

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

Gefragt 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));

Beantwortet von 8,3 k

Hallo André

möchtest du bei Gelegenheit mal die Fragen in der stacklounge druchgehen und diejenigen melden, die offensichtlich in die mathelounge gehören? Alternativ: sie aus der Sicht der Informatik beantworten? 

Hallo Lu, 

ich werde mich heute Abend darum kümmern. Bei einigen Fragen (insbesondere dann, wenn sie in den Bereich der "Theoretischen Informatik" (siehe z. B. hier: https://www.stacklounge.de/605/pumping-lemma-zum-beweisen) fallen, ist nicht immer klar, in welches Forum die Frage am besten passt. Das Pumping-Lemma ist in meinen Augen allerdings ein klassisches Informatiker-Thema. Hier erwarte ich auch einige Fragen. Ich schaue da mal genauer drüber. Was mir direkt ins Auge springt, ist die Frage "Analysis für Informatiker, ..." (https://www.stacklounge.de/662/analysis-fur-informatiker-stetigkeit-differenzierbarkeit), die definitiv in die Mathelounge gehört!

Viele Grüße!

Passen Fragen zu matlab wie https://www.mathelounge.de/353017/matlab-prozedur-schreiben und ähnliche Fragen in die stacklounge? 

Stacklounger dürfen natürlich die doch sehr mathematischen Fragen wie z.B. https://www.mathelounge.de/80513/matlab-und-newton-iteration oder https://www.mathelounge.de/517411/bestimmen-sie-die-kontrollmatrix-und-minimalabstand-von-u bei Gelegenheit auch in der mathelounge beantworten. 

Passen Fragen zu matlab wie https://www.mathelounge.de/353017/matlab-prozedur-schreiben und ähnliche Fragen in die stacklounge?

Ja. 

https://www.mathelounge.de/517411/bestimmen-sie-die-kontrollmatrix-u… Gelegenheit auch in der mathelounge beantworten.

Insbesondere diese Frage sehr ich (nur) in der Mathelounge.

Könntest Du vielleicht für meine beiden jüngst verfassten Artikel (1. Artikel https://www.stacklounge.de/985/informatik-artikel-001-model-view-controller-architektur, 2. Artikel Teil 1: https://www.stacklounge.de/986/informatik-artikel-entschlusseln-android-lockscreen-patterns, 2. Artikel Teil 2: https://www.stacklounge.de/987/informatik-artikel-entschlusseln-android-lockscreen-patterns) in der Überschrift jeweils "Informatik-Artikel" durch "Stack-Artikel" ersetzen und den Tag "stack-artikel" jeweils am Anfang einfügen? Leider kann ich geschlossene Artikel nicht editieren. Das wäre sehr lieb von Dir :-)

Artikel umbenannt. 

Nun noch eine Frage: Willst du den Lesern das Hacken beibringen? 

Vielen Dank, Lu :-) 

Willst du den Lesern das Hacken beibringen?

Nein :-) Eher den Schutz vor Hacking-Angriffen! D. h. für den Fall des Pattern-Locks:

1.) Smartphone nicht rooten!

2.) Der Pattern-Lock-Mechanismus ist nicht sicher (man bedenke z. B. auch Smudge- oder Shoulder-Surfing-Angriffe)!

3.) Smartphones nicht unachtsam herumliegen lassen (insbesondere auch die Gefahr durch Evil Maid Angriffe nicht unterschätzen).

Gut. Dann muss ich deine Beiträge gelegentlich mal genauer lesen ;) 

Beachte bitte, dass migrierte Fragen in der Stacklounge weder hier https://www.mathelounge.de/netzfragen noch im Liveticker erscheinen, bevor jemand irgendeinen Kommentar geschrieben hat. D.h. es besteht die Gefahr, dass sie erst mal "untergehen". 

Übrigens: Die Idee, das ganze Stack-Artikel zu taufen, ist wirklich super. Ich hoffe nur, dass das nicht der Faulheit geschuldet ist und es eine Funktion gibt, die den Portalnamen nimmt und lediglich den Suffix "lounge" cancelled :-)

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage sofort und kostenfrei

x
Made by a lovely community
...