1118 | Dreigl | Gleichung mit drei Variablen | ||||||||
| ||||||||||
Abzugebende Files: Dreigl.txt, Dreigl.java |
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.
Diese müssen im Bereich [-20,20] liegen (jeweils inklusive).
Die Resultate sollen jeweils durch ein Leerzeichen getrennt werden, danach soll ein Zeilenvorschub erfolgen.
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.
Eingabedaten |
4 3 6 1
1 2 1 1 2 2 1 1 |
Ausgabedaten |
0.000 0.556 -0.111
|
java Dreigl < Dreigl.i1 > Dreigl.out1
Das erzeugte File Dreigl.out1 können Sie dann mit dem mitgelieferten Outputfile Dreigl.o1 vergleichen.