Lösen von linearen Gleichungssystemen (lGS) mit bis zu 8 Variablen
unter Verwendung des Additionsverfahrens.
download als ZIP --- Beispiele
--- zurück
Einführung der Lösung von lGS in der 9. Klasse und ihre weitere Anwendung in der Sekundarstufe II.
Vorteile des Additionsverfahrens gegenüber dem Gleichsetzungs-, dem Einsetzungsverfahren und dem Multiplizieren der inversen Koeffizientenmatrix [A]-1 mit der Matrix der Absolutglieder [B] des Gleichungssystems sind:
Im Handbuch des GTR wird im Kapitel 10 "Matrizen" auf das Lösen von linearen Gleichungssystemen eingegangen.
Bedeutung der verwendeten Variablen:
D - Anzahl der zu ermittelnden Werte, d.h. Dimension des lGS
Z - jeweils zu bearbeitende Zeile der Matrix [A]
| PROGRAM:LINGAUSS | ||
| 1. | :dim [A]: Ans(1)->D | ermittle die Dimension des Gleichungssystems |
| 2. | :*row([A](1,1)-1,[A],1)->[A] | erzeuge für Zeile 1, Spalte 1 den Wert 1 |
| 3. | :For(Z,2,D):
*row+(-[A](Z,1),[A],1,Z)->[A] :End |
bearbeite für die 1. Spalte die restlichen Zeilen
erzeuge jeweils den Wert 0 |
Bedeutung der verwendeten Variablen: S - zu bearbeitende Spalte.
Die Zeilen 1, 3, 4 liegen bereits vor. An einigen Stellen muß
Spalte 1 durch Spalte S ersetzt werden.
Beispiele --- zurück
--- #oben
| PROGRAM:LINGAUSS | ||
| 1. | :dim [A]: Ans(1)->D | |
| 2. | :For(S,1,D) | NEU: für alle Spalten |
| 3. | :*row([A](S,S)-1,[A],S)->[A] | erzeuge für Zeile s, Spalte s den Wert 1 |
| 4. | :For(Z,1,D):
*row+(-[A](Z,S),[A],S,Z)->[A]
:End |
bearbeite für die s-te Spalte die restlichen
Zeilen;
erzeuge jeweils den Wert 0 |
| 5. | :End | schließe For(S,1,D) ab |
| 6. | :ClrHome:Disp "DAS ERGEBNIS IST",[A]>Frac | gib Ergebnismatrix aus
(Zahlen als Brüche dargestellt, um einen möglichst großen Bereich der Matrix anzuzeigen.) |
Nach einer Überprüfung am Beispiel, merkt man, daß sich noch schwerwiegende Fehler im Programm verstecken.
| 4. | :For(Z,1,D):
:If Z<>S:Then:*row+(-[A](Z,S) ,[A],S,Z)->[A]:End: :End |
GEÄNDERT: die z-te Zeile wird nur geändert, wenn auch wirklich der Wert 0 in dieser Spalte erscheinen soll |
| 4. | :For(Z,1,D):
:If ZS:Then:*row+(-[A](Z,S) ,[A],S,Z)->[A]:If abs([A](Z,S ))< E-9:Then:0->[A](Z,S):End: End :End |
GEÄNDERT |
| 5. | :If S<>D:Then:ClrHome:Disp
"WEITER MIT ENTER",[A]>Frac: Pause:End
:End |
GEÄNDERT: wurde eine Spalte komplett bearbeitet, so erscheint ein Zwischenergebnis auf dem Display, falls nicht schon das Endergebnis vorliegt (S=D) |
| PROGRAM:LINGAUSS | |
| 1. | :dim [A]: Ans(1)->D |
| 2. | :For(S,1,D) |
| 3. | :*row([A](S,S)-1,[A],S)->[A] |
| 4. | :For(Z,1,D):*row+(-[A](Z,S),[A],S,Z)->[A]:End |
| 5. | :If S<>D:Then:ClrHome:Disp "WEITER MIT ENTER",[A]>Frac: Pause:End |
| 6. | :End |
| 7. | :ClrHome: Disp "DAS ERGEBNIS IST",[A]>Frac |
Die Rechenschritte werden zwar angezeigt, aber sie sind bei größeren Gleichungssystemen aufgrund des kleinen Displays oft nicht vollständig zu erkennen. Abhilfe schafft hier nur das Unterbrechen des Programms mit der ON-Taste und dem anschließenden Editieren der Matrix [A] über das Menü| Matrix| Edit. Danach kann das Programm ohne Probleme erneut gestartet werden. Es werden dann oft ein paar Rechenschritte erneut unternommen bzw. angezeigt, die bereits im ersten Programmaufruf durchgeführt wurden, aber das schadet nichts.
Das Programm ist nur für bestimmt lösbare lineare Gleichungssysteme ausreichend. Es reagiert noch nicht auf die beiden weiteren noch denkbaren Fälle: Das Auftreten von keiner bzw. unendlich vielen Lösungen. Darin könnte eine Anregung zur weiteren Verbesserung des Programms gesehen werden.
Das Programm ist nicht optimal für die Arbeit mit einem
Kleincomputer eingestellt. Fehler die durch die Rechenungenauigkeit
auftreten können z. B. bei kleinen Determinanten der
Koeffizientenmatrix oder bei besonders unterschiedlichen Koeffizienten
werden nicht vermieden.
Beispiele --- zurück
--- #oben
Disp "LOESUNG LINEARER", "GLEICHUNGSSYSTEME",
"", "KOEFFIZIENTENMA-", "TRIX EINGEBEN?", "JA=1
NEIN=0"
0->E: Repeat E=102 or E=92: getKey->E: End:
If E=102:
Then: 1
dim [A]->L6: L6(1)->D:
If L6(1)+1<>L6(2):
Then: Disp "EINGABE [A]", "FALSCH - STOP": Stop: End
[A]->[B]: {D,D}->dim [B]: {D,1}->dim [C]:
For(I,1,D): [A](I,D+1)->[C](I,1): End
Goto F:
End:
If E=92: Then: 2
Disp "EINGABE D. KOEFF": Input "DIMENSION?", D:
If D>8: Then: Disp "DIMENSION>8 FALSCH": Stop: End
If D<2: Then: Disp "DIMENSION<2 FALSCH": Stop: End
{D, D+1}->dim [A]: {D, D}->dim [B]: {D, 1}->dim [C]
For (Z,1,D):
ClrHome: Disp "ZEILE": Output (1,7,Z):
For (S, 1, D): Input "SPALTE ",A: A->[B](Z,S): End:
Input "ABSOLUT B",A: A->[C](Z,1):
End:
augment([B],[C])->[A]:
End
Lbl F 3
If det [B]=0: Then: Disp "KEINE LSG. MGL.": Stop: End
{D, 1}->dim [D]
Menu("LOESUNG LIN. GLEI.-SYS.", "INVERSE MATRIX", A, "GAUSS-ALGORITHMUS",
B, "GAUSS MIT LSG.-WEG", C)
Lbl A 4
Disp "BILDE [A]-1": [B]-1[C]->[D]:
Goto D
Lbl B 0->A: 5
Lbl E
For(S,1,D)
*row([A](S,S)-1,[A],S)->[A]
For(Z,1,D)
If Z<>S: Then: *row+(-[A](Z,S),[A],S,Z)->[A]:
If abs([A](Z,S))<E-10: Then: 0[A](Z,S):End
End:
End:
If A and D<>S:
Then: ClrHome: Disp "WEITER MIT ENTER",
[A]>Frac: Pause: End
End:
For(I,1,D): [A](I,D+1)->[D](I,1): End
Goto D
Lbl C 6
1->A: Goto E
Lbl D
ClrHome: Disp [A]>Frac, "ERGEBNIS", [D]>Frac
Das obenstehende Programm soll ermöglichen, dass der Nutzer das lGS sowohl im Programm eingeben kann als auch ein bereits eingegebenes lGS nutzen kann. Außerdem kann er unter verschiedenen Lösungsmethoden wählen:
Es werden dazu die Matrizen A, B, C und D verwendet. Matrix A ist in erster Linie zur Durchführung des Gauß-Algorithmus vorgesehen. Sie trägt das gesamte Gleichungssystem. Matrix B ist die Koeffizientenmatix und C nimmt die Absolutglieder auf. D erhält die Ergebnisse und wird abschließend auf dem Diplay dargestellt.
1 Soll das lGS nicht erst eingegeben werden, so arbeitet das Programm unter der Voraussetzung, dass die Angaben vollständig in Matrix A enthalten sind. Es wird überprüft, ob die Dimension D der Matrix richtig ist, da sie das gesamte Gleichungssystem trägt, muss die Spaltenzahl also die Zeilenzahl D um Eins übertreffen.
2 Die Eingabe des lGS im Programm erfolgt zeilenweise. Die erstmalige Aufforderung "Spalte 1" ist also so zu verstehen, dass jetzt der Koeffizient der ersten Zeile in der ersten Spalte erwartet wird.
3 Hier wird die Lösbarkeit des Gleichungssystems ermittelt. Sollte es nicht lösbar sein, so wird die Meldung "Keine Lösung möglich" ausgegeben und die Abarbeitung des Programms gestoppt.
4 Berechnung der Inversen und Ermittlung der Ergebnismatrix D.
5 Durchführung der Berechnung des lGS unter Verwendung des Gauß-Algorithmus. Weiter oben ist beschrieben, wie die einzelnen Befehle zustande kommen. Die Variable A wird als Wahrheitswert für die Darstellung des ausführlichen Lösungsweges verwendet. Ist A null, so werden die Lösungsschritte nicht angezeigt.
6 Hier wird der Variablen A der Wert 1 zugewiesen. Die Lösungsschritte werden angezeigt. Ansonsten wird der Programmtext unter 5 abgearbeitet.
Finden Sie Fehler oder haben Sie Fragen? mathe@org.dz.shuttle.de