EPROG-LU - Aufgabe 1118 (Gleichung mit drei Variablen)
1118 Dreigl Gleichung mit drei Variablen
Kategorie:Mathematik
Klasse:schwer
Eingabe:Integer
Ausgabe:Real im Fixpunktf.
Abzugebende Files: Dreigl.txt, Dreigl.java

Kurzbeschreibung:

Ein lineares inhomogenes Gleichungssystem von drei Gleichungen in drei Unbekannten soll gelöst werden.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie zuerst die Koeffizienten a11, a12, a13, b1, a21, a22, a23, b2, a31, a32, a33, b3 eines linearen inhomogenen Gleichungssystemes von drei Gleichungen in drei Unbekannten ein:

a11*x1 + a12*x2 + a13*x3 = b1
a21*x1 + a22*x2 + a23*x3 = b2
a31*x1 + a32*x2 + a33*x3 = b3

Anmerkung: Der Übersichlichkeit wegen wird hier a11 statt geschrieben.

Ihr Programm soll die Werte der Variablen x1, x2 und x3 ermitteln.

Es gibt verschiedene Wege, dieses Ziel zu erreichen; eine davon ist das Gauss'sche Eliminationsverfahren, das hier beschrieben werden soll:

Bringen Sie zuerst die Matrix [a11..a33] in Halbdiagonalform, das heißt, es sollen unter der Diagonale a11 a22 a33 nur noch Nullen stehen. In der Diagonale müssen Werte ungleich 0 stehen!

Dazu addieren Sie ein Vielfaches der ersten Zeile zur zweiten und zur dritten Zeile, sodaß in der ersten Spalte nur noch in der ersten Zeile ein Wert ungleich 0 steht. Beachten Sie, daß Sie immer alle drei a-Spalten sowie die b-Spalte in die Operation einbeziehen müssen. Der Faktor, mit dem Sie die erste Zeile für diese Operation multiplizieren müssen, erhalten Sie durch -a21/a11 bzw. -a31/a11.

Danach addieren Sie ein Vielfaches der zweiten Zeile zur dritten Zeile, sodaß a32 auch 0 wird. Da a21 und a31 schon beide 0 sind, bleibt a31 auch nach dieser Operation 0.

Es können Speziallfälle auftreten, z.B. wenn a11=0 ist. In diesem Fall müssen Sie zwei Zeilen vertauschen, um weiterrechnen zu können. Wenn dies nicht zum Erfolg führt, so ist das Gleichungssystem nicht eindeutig lösbar.

Anhand eines Beispieles sollen die Eliminationsschritte vorgeführt werden:
(Dargestellt werden nur noch die Koeffizienten)

1  2  3  4
2  2  4  5   | -(2/1)*Zeile1
1 -1  1  7   | -(1/1)*Zeile1

1  2  3  4
0 -2 -2 -3
0 -3 -2  3   | -(-3/-2)*Zeile2

1  2  3  4
0 -2 -2 -3
0  0  1  7.5

Aus der Halbdiagonalform können Sie das Ergebnis für x3 ablesen, damit die Gleichung der zweiten Zeile lösen und schließlich in der ersten Zeile x1 ermitteln.

Sie können aber auch die Elimination weiterführen und die Matrix auf Diagonalform bringen. Dazu addieren Sie ein Vielfaches der dritten Zeile zur ersten und zweiten Zeile und schließlich ein Vielfaches der zweiten Zeile zur ersten.

Danach stehen (wenn Sie es richtig gemacht haben) genau in der Diagonale Werte ungleich 0, sodaß Sie x1=b1/a11, x2=b2/a22, x3=b3/a33 ermitteln können.

Eingabedaten:

Lesen Sie die zwölf INTEGER-Zahlen ein, die in der Reihenfolge a11, a12, a13, b1, a21, a22, a23, b2, a31, a32, a33, b3 zu interpretieren sind.

Diese müssen im Bereich [-20,20] liegen (jeweils inklusive).

Ausgabedaten:

Bei korrekten Eingabedaten soll Ihr Programm die Lösung für x1, x2 und x3 als Float-Zahlen ausgeben.

Die Resultate sollen jeweils durch ein Leerzeichen getrennt werden, danach soll ein Zeilenvorschub erfolgen.

Fehlerbehandlung:

Sämtliche Eingabedatensätze sind immer vollständig einzulesen. Generell wird bei fehlerhaften Eingabedatensätzen 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.

Sind die Datentypen bei allen Eingaben richtig, die eingegebenen Daten aber inhaltlich nicht korrekt oder erfüllen nicht die Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
4 3 6 1
1 2 1 1
2 2 1 1

Ausgabedaten
0.000 0.556 -0.111


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 Dreigl < Dreigl.i1 > Dreigl.out1

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

Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif