Lineare Gleichungssysteme mit komplexen Zahlen
Ein lineares Gleichungssystem lässt sich mit Hilfe einer Matrix und zweier Vektoren darstellen:
A x = b.
A ist die Koeffizientenmatrix des Gleichungssystems,
b ist der Vektor der rechten Seite und
x ist der Lösungsvektor.
Sowohl in A wie b kann man hier komplexe Zahlen verwenden.
Zu den Eingabedaten
Zulässige Eingaben sind Ausdrücke, die mit Hilfe von Fließkommazahlen und (der imginären Einheit) i gebildet werden.
Komplexe Zahlen werden dabei in der arithmetischen Form angegeben, also z.B. 4+3*i oder in der Exponentialform, also z.B. 5*e^(0.6435*i).
Zum Algorithmus
Der verwendete Algorithmus ist das Gauß'sche Eliminationsverfahren.
Der Unterschied zum "normalen" Verfahren besteht hier nur darin, dass alle Elemente der Koeffizientenmatrix A
sowie der Vektoren x und b nun durch jeweils 2 Zahlen (Realteil und Imaginärteil) dargestellt werden.
Außerdem müssen die grundlegenden Rechenoperationen (+,-,*,/) durch Funktionsaufrufe für die komplexe Rechnung ersetzt werden.
Alternative Berechnung
Man kann im Prinzip auch den Gauß'schen Algorithmus für reelle Zahlen verwenden.
Dann muss man ein reelles System mit doppelt sovielen Unbekannten lösen, das folgendermaßen aufgebaut ist:
⌈ Re(A) -Im(A) ⌉ ⌈ Re(x) ⌉ = ⌈ Re(b) ⌉
⌊ Im(A) Re(A) ⌋ ⌊ Im(x) ⌋ ⌊ Im(b) ⌋
Jetzt enthält der reelle Vektor der Unbekannten die gesuchten komplexen Unbekannten x getrennt nach Real- und Imaginärteil.
Analoges gilt für den Vektor der rechten Seite.
Die reelle Koeffizientenmatrix enthält 4 Untermatrizen, die ebenfalls Real- bzw. Imaginärteile der komplexen Matrix A aufnehmen.
Es wird bei dieser Vorgehensweise für die Untermatrizen des Gleichungssystems im Prinzip die gleiche Rechenregel angewendet, die auch für das Multiplizieren von 2 komplexen Zahlen gilt:
(a + i b)*(x + i y) = a*x - b*y + i (b*x + a*y).
Also:
( Re(A)+i Im(A) ) * ( Re(x)+i Im(x) ) = Re(A)*Re(x)-Im(A)*Im(x)
+ i ( Im(A)*Re(x)+Re(A)*Im(x) ) = Re(b) + i Im(b)
Der Vergleich von Realteil und Imaginäteil ergibt die beiden Blockzeilen des besagten reellen Systems:
Re(A)*Re(x) - Im(A)*Im(x) = Re(b)
Im(A)*Re(x) + Re(A)*Im(x) = Im(b)
Der Speicheraufwand verdoppelt sich bei dieser Vorgehensweise. Auch der Rechenaufwand steigt, wenn sich die Zeilen-/Spaltenzahl der Matriz verdoppelt,
denn der Rechenaufwand des Algorithmus ist für vollbesetzte Matrizen der Ordnung n×n proportional zu n3.
Das ergibt bei Verdopplung von n, unabhängig von n, den Faktor 8. Der Aufwand einer komplexen Multiplikation ist aber nur das 4-fache des Aufwands der reellen Multiplikation.
weitere JavaScript-Programme