# Determinante einer nxn Matrix



## firey (30. Jun 2008)

Hallo Leute.

Ich bin hier fast am verzweifeln. 
Wir haben von der Uni eine Aufgabe bekommen, bei der die Determinante
einer nxn Matrix berechnet werden soll. Als Hilfestellung gab es eine Datei
dazu, die eine beliebige Matrix vom Benutzer einliest.

Vorneweg:
Ja ich habe bereits die Suche benutzt und habe zwar was gefunden,
jedoch half es mir persönlich nicht sonderlich weiter, da ich offen gestanden
kein Händchen fürs programmieren habe. Hoffe deshalb sehr auf eure Hilfe damit ich
da irgendwie durchkomme...  

Ich bin bereits soweit (und das ist für mich schon viel!), dass das Programm 
nachprüft, ob der Benutzer eine quadratische Matrix eingeben hat. Ist dies
der Fall so berechnet es auch schon die Determinante eine 2x2 und einer 3x3 Matrix.

Mein Problem beginnt aber ab der Stelle 4x4.
Ich weis einfach nicht, wie ich es in eine sinnvolle Schleife bringen kann,
dass mir das Programm die Det für eine beliebige nxn Matrix berechnet. Ich weis wie es theoretisch 
funktionieren kann ( s. Link) aber ich kann einfach nicht nachvollziehen,
wie ich so etwas in Java umsetzen kann.

Ich hoffe so sehr auf eure Unterstützung, sonst sehe ich da ziemlich alt aus glaube ich 
Vielen Vielen Dank schonmal im Voraus,

lg
Firey

Ach bevor ichs vergesse, hier noch der Link
http://img300.imageshack.us/img300/9325/scannen0025xw0.jpg


----------



## Siassei (30. Jun 2008)

Hallo,

was hast du schon erstellt? Eine kleine Strukturangabe wäre hilfreich.

*1.) Struktur*
Ich persönlich würde das Prototype-Pattern [1] hier einsetzen.
Interface: Matrix
Prototype: 2x2 ; 3x3 ; nxn ; nxm

Vorteil:
- Performancegewinn aus Anpassungsarbeiten des Codes

Nachteil:
- mehrere Implementierung nötig

Frage: Rechnest du mit Integer oder Fließkommazahlen?
Fließkommazahlen darfst du niemals wie folgt behandeln

```
double a, b;
if(a == b)

// oder
if(a == 0.0)

// oder
if(a > 0.0 || a < 0.0)
```

Lösung:

```
double a, b;
double minDiff = 0.000001;

if((a - b) > minDiff || (a - b) > -minDiff)

// oder
if(a > minDiff  || a < -minDiff )
```

*2.) Implementation*
Sind dir die Gauß-Algorithmus  oder Laplacescher Entwicklungssatz [2] bekannt? Diese bilden doch eine schöne Grundlage für eine progr. Umsetzung. Oder?

Falls du eine schlechte Umsetzung sehen willst. Folge folgenden 
Link.

Gegenfrage, musst du das selbst Implementieren oder darfst du Fremdbibliotheken benutzen. Sprich, musst du nur zum Ergebniss kommen oder alles selbst umsetzen?
Jama Jama Source


[1] Prototype - Pattern
[2] Determinate


----------



## Siassei (30. Jun 2008)

Oder:

www.codeproject.com/KB/architecture/ymatrix.aspx
www.codeproject.com/KB/recipes/matrixclass.aspx
www.codeproject.com/KB/recipes/matrix.aspx


----------



## firey (1. Jul 2008)

ALso danke erstmal für die Antworten.

*1.) Struktur*
Ich persönlich würde das Prototype-Pattern [1] hier einsetzen.
Interface: Matrix
Prototype: 2x2 ; 3x3 ; nxn ; nxm

Was für nen Ding? Prototype - Pattern?
Noch nie was von gehört. Klingt auch kompliziert.


Frage: Rechnest du mit Integer oder Fließkommazahlen?
Fließkommazahlen darfst du niemals wie folgt behandeln


Rechne alles mit Integer Zahlen.



*2.) Implementation*
Sind dir die Gauß-Algorithmus  oder Laplacescher Entwicklungssatz [2] bekannt? Diese bilden doch eine schöne Grundlage für eine progr. Umsetzung. Oder?

Naja in dem Link gehe ich ja nach dem Laplace Entwicklungssatz vor. Sprich entwicklung nach Zeile / Spalte aber ich weis halt nicht wie ich das programmiertechnisch umsetzen kann so dass ich das in eine sinnvolle schleife reinpacken kann.

Gegenfrage, musst du das selbst Implementieren oder darfst du Fremdbibliotheken benutzen. Sprich, musst du nur zum Ergebniss kommen oder alles selbst umsetzen?

Also wir sollen den Algorithmus dazu selbst schreiben, das einzigste, was wir bekommen haben is das Programm zur Einlesung von Zahlen vom Benutzer. Den Rest + Ausgabe sollen wir dann selbst vornehmen.



Bin jetzt bei mir in meinem Programm soweit, dass er 3x3 Matrix berechnet, aber das noch über die Sarrus Regel.
Für alle n> 3x3 soll er dann auf einen Algorithmus zugreifen, der das berechnet aber da weis ich halt nich so wirklich wie ich das umsetzen kann....

da liegt das problem


----------



## Gast (7. Jul 2008)

Hehe armer Alex, naja mach dir mal keine Sorgen ich habs fast und sieht sogar gut aus^^


----------

