3036 Gauss Inverse Matrix bestimmen (nach Gauss)
Kategorie:Mathematik
Klasse:schwer
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Gauss.txt, Gauss.java, *.java , 311.txt, 634.txt

Kurzbeschreibung:

Eine nxn-Matrix soll mittels erweiterem Gauss'schem Eliminationsverfahren invertiert werden, wobei mit Bruchzahlen gerechnet werden soll.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie zuerst die Dimension der Matrix (maximal 5) und dann die Elemente ein. Speichern Sie die Elemente als Bruchzahlen. Die Zahl 0 soll als 0/1 gespeichert werden.

Ermitteln Sie die inverse Matrix durch das erweiterte Gauss'sche Eliminationsverfahren, wobei Sie wie folgt vorgehen:

Schreiben eine Einheitsmatrix neben die zu invertierende Matrix.

Bringen Sie die Matrix auf Diagonalform. Addieren Sie dazu zuerst ein Vielfaches der ersten Zeile zu allen anderen, sodaß in der ersten Spalte nur noch in der ersten Zeile ein Wert ungleich 0 steht. Beachten Sie, daß Sie immer alle Elemente der jeweiligen Zeile mitziehen müssen. Der Faktor, mir dem Sie die erste Zeile für diese Operation multiplizieren müssen, erhalten Sie durch -Ai1/A11.

Addieren Sie danach ein Vielfaches der zweiten Zeile zu allen weiter unten stehenden Zeile, sodaß Ai2 = 0 für i>2 wird. Dieses Verfahren wiederholen Sie, bis unterhalb der Hauptdiagonale nur noch Nullen stehen. In der Diagonale müssen Werte ungleich 0 stehen!

Wenn Sie das "Pech" haben, daß ein Element in der Hauptdiagonale 0 ist, dann müssen Sie eine weiter unten stehende Zeile, die in dieser Spalte keine 0 stehen hat, zu dieser Zeile addieren und dann weiterrechnen. Führt dies nicht zum Erfolg, dann ist die Matrix nicht invertierbar.
(Normalfall)

Jetzt haben Sie den schwierigsten Teil hinter sich. Nun bringen Sie die Matrix in Diagonalform, d.h., auch oberhalb der Diagonale sollen nur noch Nullen stehen. Dazu addieren sie ein Vielfaches der letzten Zeile zu allen weiter oben stehenden, ein Vielfaches der vorletzten zu allen weiter oben stehenden usw.

Zuletzt dividieren Sie jede Zeile durch das in der Hauptdiagonale stehende Element.

Die Matrix (B11...B33) ist die gesuchte inverse Matrix zu A!

Eingabedaten:

Lesen Sie zuerst die Dimension der Matrix als Integer-Zahl ein. Diese darf mindestens 1 und maximal 5 betragen.

Danach werden die Elemente der Matrix als Zahlen vom Typ INTEGER eingelesen, wobei diese im Bereich [-100,100] (inklusive) liegen müssen.

Die Reihenfolge der Elemente ist A11, A12, ..., A1n, A21, ..., A2n, ..., An1, ..., Ann (zeilenweise von links nach rechts).

Ausgabedaten:

Bei korrekten Eingabedaten geben Sie die Elemente der Matrix in der selben Reihenfolge wie bei den Eingabedaten aus, wobei Sie diese als gekürzte Bruchzahlen ausgeben sollen.

Trennen Sie Zähler und Nenner durch einen Bruchstrich ("/") und schreiben Sie ein eventuelles negatives Vorzeichen vor den Zähler. Die Zahl 0 soll nur als "0" ausgegeben werden; alle anderen ganzen Zahlen werden als "z/1" (wobei z klarerweise für die entsprechende Zahl steht) ausgegeben.

Trennen Sie die Elemente durch Leerzeichen und geben Sie nach jeder Zeile der Matrix einen Zeilenvorschub aus.

Fehlerbehandlung:

Sämtliche Eingabedatensätze sind immer vollständig einzulesen. Falls aber die Dimensionseingabe bereits falsch war, so soll nach einer Fehlermeldung abgebrochen werden. Generell wird bei fehlerhaften Eingabedatensätze nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.

Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.

Waren die Datentypen bei allen Eingaben richtig, die eingegebenen Daten dann aber inhaltlich nicht korrekt (z.B. Dimension außerhalb des erlaubten Bereiches), so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
-1

3
1 2 0
0 1 2
2 0 2

Ausgabedaten
FALSCHE EINGABE

1/5 -2/5 2/5
2/5 1/5 -1/5
-1/5 2/5 1/10


Testen:

Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:

java Gauss < Gauss.i1 > Gauss.out1

Das erzeugte File Gauss.out1 können Sie dann mit dem mitgelieferten Outputfile Gauss.o1 vergleichen.