Portrait
Name:
Christoph Arnold
Studium:
Wirtschaftsinformatik (FH Friedberg)
Jabber:
judger@jabber.ccc.de

Valid XHTML 1.0 Strict CSS ist valide!

Determinante ausrechnen

15:05 Uhr am 31.10.2008 in Software


Ich habe mal ein kleines Java Programm geschrieben, was Determinanten aus n-dimensionalen Matrizen ausrechnen kann.

Leider hatte ich bisher noch keine Gelegenheit, mir die Oberflächenentwicklung mit Swing genauer anzuschauen. Daher muss die Matrix momentan noch manuell in den Quelltext eingegeben werden.
Update folgt.

Quelltext um Determinante auszurechnen:

public class Matrix {
    private int matrix[][];
    private int groesse;

    public Matrix() {
        // Hier wird die Matrix definiert, vorne die Zeile, dahinter die Spalte
        groesse = 3;
        matrix = new int[groesse][groesse];
        matrix[0][0] = 2;
        matrix[0][1] = 3;
        matrix[0][2] = -1;
        
        matrix[1][0] = 1;
        matrix[1][1] = -1;
        matrix[1][2] = 1;
        
        matrix[2][0] = 3;
        matrix[2][1] = 7;
        matrix[2][2] = -3;
    }
    
    // Hier wird die Rekursion gestartet
    public void rechne() {
        int determinante = rRechne(matrix, groesse);
        System.out.println("Determinante ist: " + determinante);
    }
    
    // Matrix wird nach dem Sacchus'schen Entwicklungssatz aufgelöst und die Unterdeterminanten werden rekursiv ausgerechnet
    private int rRechne(int akt_matrix[][], int akt_groesse) {
        int determinante = 0;

        // Falls Größe auf 2x2 runtergerechnet ist, kann man die Determinante ausrechnen
        if(akt_groesse == 2) {
            determinante = (akt_matrix[0][0]*akt_matrix[1][1])-(akt_matrix[1][0]*akt_matrix[0][1]);
        }
        else {
            for(int i=0; i<akt_groesse; i++) {
                if(i%2 == 0)
                    determinante += akt_matrix[i][0] * rRechne(neueMatrix(akt_matrix, akt_groesse, i), akt_groesse-1);
                else
                    determinante -= akt_matrix[i][0] * rRechne(neueMatrix(akt_matrix, akt_groesse, i), akt_groesse-1);
            }
        }
        return determinante;
    }
    
    // Hier werden die Untermatrizen erstellt, die vom Sacchus'schen Entwicklungssatz benötigt werden
    private int[][] neueMatrix(int akt_matrix[][], int akt_groesse, int akt_zeile) {
        int neue_matrix[][] = new int[akt_groesse-1][akt_groesse-1];
        for(int zeile=0; zeile<akt_groesse; zeile++) {
            for(int spalte=1; spalte<akt_groesse; spalte++) {
                if(zeile < akt_zeile)
                    neue_matrix[zeile][spalte-1] = akt_matrix[zeile][spalte];
                else if(zeile > akt_zeile)
                    neue_matrix[zeile-1][spalte-1] = akt_matrix[zeile][spalte];
                else
                    continue;
            }
        }
        return neue_matrix;
    }
}

*UPDATE*: So, es gibt eine Oberfläche! Hier könnt ihr euch die neue Version runterladen!


JavaMathe

Kommentare

09:39 Uhr am 26.11.2008 von yasemin

hallo, also ich muss sagen das IHR Quelltext das beste ist was ich bis jetzt im Internet über Determinanten gesehen habe. Ich versuche mir gerade Java beizubringen, studiere auch Wirtschaftsinformatik, jedoch komm ich nicht so voran wie ich es gerne hätte.
Könnten sie eventuell kommentare am Programm machen, damit ich das Programm nachvollziehen kann und auch lernen?

13:26 Uhr am 27.11.2008 von Christoph

Hallo Yasemin,
ich habe den Quelltext mal kommentiert, hoffentlich reicht das schon, ansonsten einfach noch einen kleinen Kommentar verfassen.

LG

14:33 Uhr am 28.01.2010 von Peter

hmm.. wenn ich das programm ausführen kommt ne Fehlermeldung:
java.lang.NoSuchMethodError: main
Exception in thread "main"

15:33 Uhr am 28.01.2010 von Christoph

Hallo Peter,
die Klasse ist nicht eigenständig lauffähig. Sie funktioniert nur, wenn sie von außen aufgerufen wird, um so direkt die Methoden zu starten. Aber schau dir mal meinen fertigen Determinanten-Rechner mit Oberfläche an (oben verlinkt). Dort brauchst du nichts weiter ändern, der läuft eigenständig.

LG

Neuer Kommentar

Sicherheitscode

* kennzeichnet notwendige Felder