Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Mathematik

Lösen eines linearen Gleichungssystemes (mit beliebig vielen Unbekannten)

Lizenz:Erster Autor:Letzte Bearbeitung:
GPLv3MitgliedTJF 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:


Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 11.06.2011 von MitgliedTJF angelegt.
  • Die aktuellste Version wurde am 12.06.2011 von MitgliedTJF gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen