Komplexe Zahlen

Komplexe Zahlen bestehen aus einem Realteil und einem Imaginärteil, der in Python den Suffix j erhält.

>>> 7 + 2j
(7+2j)

Bemerkung

Python drückt die resultierende komplexe Zahl in Klammern aus, um anzuzeigen, dass die Ausgabe den Wert eines einzelnen Objekts darstellt:

>>> (7 + 2j) - (4 + 4j)
(3-2j)
>>> 2j * 4j
(-8+0j)

Bemerkung

Die Berechnung von 2j * 4j ergibt die erwartete Antwort von -8, aber das Ergebnis bleibt ein Python-Objekt für komplexe Zahlen. Komplexe Zahlen werden nie automatisch in entsprechende reelle oder ganzzahlige Objekte umgewandelt. Ihr könnt aber leicht auf ihre realen und imaginären Teile mit real und imag zugreifen.

>>> x = 2j * 4j
>>> x
(-8+0j)
>>> x.real
-8.0
>>> x.imag
0.0

Bemerkung

Die Real- und Imaginärteile einer komplexen Zahl werden immer als Fließkommazahlen zurückgegeben.

Erweiterte Funktionen

Die Funktionen im Modul math sind nicht auf komplexe Zahlen anwendbar; einer der Gründe hierfür dürfte sein, dass die Quadratwurzel aus -1 einen Fehler erzeugen soll. Daher wurden ähnliche Funktionen für komplexe Zahlen arbeiten im cmath-Modul bereitgestellt:

cmath.acos(), cmath.acosh(), cmath.asin(), cmath.asinh(), cmath.atan(), cmath.atanh(), cmath.cos(), cmath.cosh(), python3:cmath.e(), cmath.exp(), cmath.log(), cmath.log10(), python3:cmath.pi(), cmath.sin(), cmath.sinh(), cmath.sqrt(), cmath.tan(), cmath.tanh().

Um im Code deutlich zu machen, dass es sich bei diesen Funktionen um spezielle Funktionen für komplexe Zahlen handelt, und um Namenskonflikte mit den normaleren Äquivalenten zu vermeiden, empfiehlt sich der einfache Import des Moduls um bei der Verwendung der Funktion ausdrücklich auf das cmath-Modul zu verweisen, z.B.:

>>> import cmath
>>> cmath.sqrt(-2)
1.4142135623730951j

Warnung

Nun wird auch verständlicher, weswegen wir nicht den Import aller Funktionen eines Moduls empfehlen mit from MODULE import *. Wenn ihr damit zuerst das Modul math und dann das Modul cmath importieren würdet, hätten die Funktionen in cmath Vorrang vor denen von math. Außerdem ist es beim Verstehen des Codes viel mühsamer, die Quelle der verwendeten Funktionen herauszufinden.

Checks

  • Ladet das Modul math und probiert einige der Funktionen aus. Ladet dann auch das Modul cmath und macht dasselbe.

  • Wie könnt ihr die Funktionen des math-Moduls wiederherstellen?