Code-Beispiel
Lösen eines linearen Gleichungssystemes (mit beliebig vielen Unbekannten)
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
GPLv3 | TJF | 12.06.2011 |
Die Lösung einer Gleichung mit einer Unbekannten wie z. B. 3x = 6 ist trivial. Durch Umformung zu x = 6 / 3 erhält man die Lösung x = 2. Allgemein läßt sich formulieren:
a x = b
wird zu
x = b / a
Diese Beziehung gilt nun nicht nur für Gleichungen mit einer Unbekannten x, sondern unter Anwendung der Gesetze der linearen Algebra auch für Gleichungssysteme mit vielen Unbekannten Xi. Diese werden in einem Vektor X zusammengefasst. Zur Lösung des Gleichungssystemes genügt dann nicht eine einzige Gleichung, sondern es muss für jede Unbekannte Xi eine Gleichung im System vorhanden sein.
Auf der rechten Seite wird die einzelne Konstante b durch mehrere Konstanten Bi ergänzt, welche im Vektor B zusammengefasst werden.
Anstelle der Einzelkonstanten a erscheinen nun mehrere Konstanten, (welche Koeffizienten genannt werden und) die in einer Matrix A zusammengefasst werden. Diese Koeffizientenmatrix gibt zeilenweise an, wie oft eine Unbekannte in einer Gleichung vorkommt.
Ähnlich wie im o. g. Trivialfall ergibt sich die Lösung des Gleichungssystemes
A X = B
aus der Formel
X = B / A , oftmals auch formuliert als X = A^(-1) B
Im folgenden Quelltext wird dies am Beispiel eines linearen Gleichungssystemes mit drei Unbekannten demonstriert. Da FreeBasic im Auslieferungszustand (bis Version 0.22 einschließlich) nicht über Vektor- und Matrizenfunktionen verfügt, ist die Einbindung einer Zusatzbibliothek notwendig. Im Beispiel wird die Bibliothek libFBla verwendet, wodurch sich das Gleichungssystem in drei Code-Zeilen eingeben und lösen läßt (jene beginnend mit VAR):
#INCLUDE "libFBla.bas"
'#DEFINE english
' used to print out headers and values
#MACRO HEADER(_G_, _E_, _T_)
#IFDEF english
?:?_E_
#ELSE
?:?_G_
#ENDIF
?_T_
#ENDMACRO
HEADER("Loesung eines linearen Gleichungssystemes", _
"Solution of a linear equation system", "")
?" 3x - 3y + z = 0"
?" + 4y - z = 5"
?" 2x - 2y + z = 1"
VAR A = LA_M("3, -3, 1" NL _
"0, 4, -1" NL _
"2, -2, 1")
HEADER("Koeffizientenmatrix A:", _
"Coefficient matrix A:", A)
VAR B = LA_V("0, 5, 1")
HEADER("Loesungsvektor B:", _
"Solution vector B:", B)
VAR r = B / A
HEADER("Ergebnisvektor r = B / A:", _
"Result vector r = B / A:", r)
HEADER("Ergebnisse:", _
"Results:", "")
?"x = ";r.Val_(0)
?"y = ";r.Val_(1)
?"z = ";r.Val_(2)
Anmerkung:
- Auf diese Weise können Gleichungssysteme mit beliebig vielen Unbekannten gelöst werden. Dazu ist eine angepasste Initialisierung der Koeffizientenmatrix A und des Vektors der rechten Seite B, sowie eine angepasste Ergebnisausgabe notwendig.
- Ein lineares Gleichungssystem ist nur dann lösbar, wenn jede Gleichungszeile neue Informationen enthält (, welche den vorangegangen nicht widersprechen). Der Mathematiker sagt: die Gleichungen müssen linearer unabhängig sein. (Alle Gleichungen dürfen paarweise nicht so ähnlich sein, dass sie durch Umformung ineinander überführt werden können.)
Zusätzliche Informationen und Funktionen |
- Das Code-Beispiel wurde am 11.06.2011 von TJF angelegt.
- Die aktuellste Version wurde am 12.06.2011 von TJF gespeichert.
|
|