12.7 Komplexe Zahlen – complex 

Überraschenderweise findet sich ein Datentyp zur Speicherung komplexer Zahlen unter Pythons Basisdatentypen. In vielen Programmiersprachen würden komplexe Zahlen eher eine Randnotiz in der Standardbibliothek darstellen oder ganz außen vor bleiben. Sollten Sie nicht mit komplexen Zahlen vertraut sein, können Sie diesen Abschnitt gefahrlos überspringen. Er behandelt nichts, was für das weitere Erlernen von Python vorausgesetzt würde.
Komplexe Zahlen bestehen aus einem reellen Realteil und einem Imaginärteil. Der Imaginärteil ist eine reelle Zahl, die mit der imaginären Einheit j multipliziert wird.[ 39 ](Das in der Mathematik eigentlich übliche Symbol der imaginären Einheit ist i. Python hält sich hier an die Notationen der Elektrotechnik. ) Die imaginäre Einheit j ist als Lösung der Gleichung
j2 = –1
definiert. Im folgenden Beispiel weisen wir einer komplexen Zahl den Namen v zu:
v = 4j
Wenn man wie im Beispiel nur einen Imaginärteil angibt, wird der Realteil automatisch als 0 angenommen. Um den Realteil festzulegen, wird dieser zum Imaginärteil addiert. Die beiden folgenden Schreibweisen sind äquivalent:
v1 = 3 + 4j
v2 = 4j + 3
Anstelle des kleinen j ist auch ein großes J als Literal für den Imaginärteil einer komplexen Zahl zulässig. Entscheiden Sie hier ganz nach Ihren Vorlieben, welche der beiden Möglichkeiten Sie verwenden möchten.
Sowohl der Real- als auch der Imaginärteil können eine beliebige reelle Zahl sein, also Instanzen der Typen int oder float. Folgende Schreibweise ist demnach auch korrekt:
v3 = 3.4 + 4e2j
Zu Beginn des Abschnitts über numerische Datentypen wurde bereits angedeutet, dass sich komplexe Zahlen von den anderen numerischen Datentypen unterscheiden. Da für komplexe Zahlen keine mathematische Anordnung definiert ist, können Instanzen des Datentyps complex nur auf Gleichheit oder Ungleichheit überprüft werden. Die Menge der vergleichenden Operatoren ist also auf == und != beschränkt.
Darüber hinaus sind sowohl der Modulo-Operator % als auch der Operator // für eine ganzzahlige Division im Komplexen zwar formal möglich, haben jedoch keinen mathematischen Sinn. Deswegen ist ihre Verwendung mit komplexen Operanden seit Python 3.0 nicht mehr möglich.
Der Datentyp complex besitzt zwei Attribute, die die Arbeit mit ihm erleichtern. Es kommt zum Beispiel vor, dass man Berechnungen nur mit dem Realteil oder nur mit dem Imaginärteil der gespeicherten Zahl anstellen möchte. Um einen der beiden Teile zu isolieren, stellt eine complex-Instanz die folgenden Attribute bereit (siehe Tabelle 12.11).
Attribut | Beschreibung |
---|---|
x.real | Realteil von x als Gleitkommazahl |
x.imag | Imaginärteil von x als Gleitkommazahl |
Tabelle 12.11 Attribute des Datentyps complex
Diese können wie im folgenden Beispiel verwendet werden:
>>> c = 23 + 4j
>>> c.real
23.0
>>> c.imag
4.0
Außer über seine zwei Attribute verfügt der Datentyp complex über eine Methode, die in Tabelle 12.12 exemplarisch für eine Referenz auf eine komplexe Zahl namens x erklärt wird.
Methode | Beschreibung |
---|---|
x.conjugate() | Liefert die zu x konjugierte komplexe Zahl. |
Tabelle 12.12 Methoden des Datentyps complex
Das folgende Beispiel demonstriert die Verwendung der Methode conjugate:
>>> c = 23 + 4j
>>> c.conjugate()
(23-4j)
Das Ergebnis von conjugate ist wieder eine komplexe Zahl und verfügt daher ebenfalls über die Methode conjugate:
>>> c = 23 + 4j
>>> c2 = c.conjugate()
>>> c2
(23-4j)
>>> c3 = c2.conjugate()
>>> c3
(23+4j)
Das Konjugieren einer komplexen Zahl ist eine selbstinverse Operation. Das bedeutet, dass das Ergebnis einer zweifachen Konjugation wieder die Ausgangszahl ist.