Komplexe Zahlen in Python - der Datentyp "complex"
Anzeige Hier werben
Ü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 Artikel gefahrlos überspringen. Es wird nichts behandelt, was für das weitere Erlernen von Python vorausgesetzt würde.
Komplexe Zahlen bestehen aus einem reellen Realteil und einem Imaginärteil, der aus einer reellen Zahl besteht, die mit der imaginären Einheit j multipliziert wird. 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 kann als Lösung der Gleichung
j2 = –1
verstanden werden. 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 auf den Imaginärteil addiert. Die beiden folgenden Schreibweisen sind äquivalent:
v1 = 3 + 4j
v2 = 4j + 3
Statt 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 kann eine beliebige reelle Zahl sein, also Instanzen der Typen int oder float. Folgende Schreibweise ist demnach auch korrekt:
v3 = 3.4 + 4e2j
Da für komplexe Zahlen keine mathematische Reihenfolge definiert ist, können Instanzen des Datentyps complex nur auf Gleichheit oder Ungleichheit verglichen werden. Die Menge der vergleichenden Operatoren ist also auf ==, != und <> beschränkt. Des Weiteren 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 sind sie in Python inzwischen als deprecated (dt. abgelehnt), also als nicht mehr zu verwenden, eingestuft. Sollten Sie die Operatoren dennoch verwenden, wird eine entsprechende Warnung ausgegeben:
1 2 3 | >>> 4j % 2+3j
sys:1: DeprecationWarning: complex divmod(), // and % are deprecated
7j
|
Der Datentyp complex besitzt zwei sogenannte Attribute, die das Arbeiten mit ihm erheblich 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, erlaubt Python folgende Notationen, die hier exemplarisch an einer Referenz auf eine komplexe Zahl namens x gezeigt werden:
| Attribut |
Beschreibung |
x.real |
Realteil von x als reelle Zahl (float) |
x.imag |
Imaginärteil von x als reelle Zahl (float) |
Diese können im Code ganz selbstverständlich verwendet werden:
1
2
3
4
5 | >>> c = 23 + 4j
>>> c.real
23.0
>>> c.imag
4.0
|
Wir werden im Zusammenhang mit objektorientierter Programmierung darauf zurückkommen und näher darauf eingehen, was ein Attribut genau ist. Außer über seine zwei Attribute verfügt der Datentyp complex über eine sogenannte Methode, die in der Tabelle exemplarisch für eine Referenz auf eine komplexe Zahl namens x erklärt wird.
| Methode |
Beschreibung |
x.conjugate() |
Liefert die zu x konjugiert komplexe Zahl |
Im Quelltext kann eine Methode ähnlich einfach verwendet werden wie ein Attribut:
1 2 3 | >>> c = 23 + 4j
>>> c.conjugate()
(23-4j)
|
Das Ergebnis von conjugate ist wieder eine komplexe Zahl, der selbstverständlich ein Name zugewiesen werden kann. Außerdem verfügt natürlich auch das Ergebnis über eine Methode conjugate:
1
2
3
4
5
6
7 | >>> c = 23 + 4j
>>> c2 = c.conjugate()
>>> c2
(23-4j)
>>> c3 = c2.conjugate()
>>> c3
(23+4j)
|
Dies sind die Grundlagen des Datentyps complex.
Buchhinweis
Dieser Artikel stammt aus dem Buch "Python – Das umfassende Handbuch" von Peter Kaiser und Johannes Ernesti und wurde uns von Galileo Design zur Verfügung gestellt hat. Das Buch kann über die Webseite des Galileo Verlag bestellt werden, oder als Openbook (kostenloses eBook) heruntergeladen werden.
Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 6 Personen an der Seite "Komplexe Zahlen in Python - der Datentyp "complex"" mitgewirkt.
Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Komplexe Zahlen in Python - der Datentyp "complex"" hier bearbeiten.



Fabian Ziegler
Moritz Kern
David Danier
Michael Zaversnik
wow
ich hätte jetzt von außen betrachtet nicht damit gerechnet dass programmiersprachen komplexe zahlen beherrschen.. freut mich dafür umsomehr - sind einfach cool (da soll noch wer behaupten √(-9) wäre nicht lösbar :P)
aber ein praxisbeispiel wär interessant - wo werden die konkret (in der edv) benötigt ...?