Python hat einen Standardtyp für den Umgang mit komplexen Zahlen, den Typ COMPLEX. Wenn Sie nur einfache Berechnungen durchführen wollen, brauchen Sie keine Module zu importieren, aber wenn Sie die Standardbibliothek cmath importieren, können Sie auch mathematische Funktionen (exponentielle, logarithmische, trigonometrische usw.) verwenden, die komplexen Zahlen entsprechen.
Die folgenden Inhalte werden hier mit Beispielcode erläutert.
- Komplexe Variablen generieren
- Reale und imaginäre Teile erhalten:
real
,imag
Attribut - Konjugiert komplexe Zahlen erhalten:
conjugate()
Methode - Absolutwert (Betrag) ermitteln:
abs()
Funktion (z. B. Mathe, Programmieren, Programmieren) - Deklination (Phase) erhalten:
math
,cmath
Modul - Polarkoordinatentransformation (Darstellung in Polarform):
math
,cmath
Modul - Berechnung von komplexen Zahlen (Quadratur, Potenzen, Quadratwurzeln)
- Komplexe Variablen generieren
- Real- und Imaginärteile von komplexen Zahlen ermitteln: real, imagAttribut
- Konjugiert komplexe Zahlen erhalten: conjugate()
- Ermitteln des Absolutwerts (Betrags) einer komplexen Zahl: abs()
- Ermitteln der Deklination (Phase) einer komplexen Zahl: math, cmathModul
- Polarkoordinatentransformation der komplexen Zahlen (polare formale Darstellung): math, cmathModul
- Berechnung von komplexen Zahlen (Quadratur, Potenzen, Quadratwurzeln)
Komplexe Variablen generieren
Bezeichne die imaginäre Einheit mit j und schreibe das Folgende, beachte, dass es nicht i ist.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Wenn der Imaginärteil 1 ist, führt das Weglassen dieses Teils zu einem NameError. Wenn eine Variable mit dem Namen j zuerst definiert wird, wird sie als diese Variable betrachtet.
1j
Sie sollte ausdrücklich so formuliert werden.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
Wenn der Realteil 0 ist, kann er weggelassen werden.
c = 3j
print(c)
# 3j
Wenn Sie einen Wert mit einem Imaginärteil von 0 als komplexen Typ definieren wollen, schreiben Sie explizit 0. Wie unten beschrieben, können Operationen zwischen dem komplexen Typ und dem Ganzzahl- oder Gleitkommatyp durchgeführt werden.
c = 3 + 0j
print(c)
# (3+0j)
Real- und Imaginärteil können als Gleitkomma-Float-Typ angegeben werden. Die Exponentialschreibweise ist ebenfalls zulässig.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
Er kann auch durch einen Konstruktor vom Typ “komplex” erzeugt werden, wie in “komplex(Realteil, Imaginärteil)”.
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Real- und Imaginärteile von komplexen Zahlen ermitteln: real, imagAttribut
Die Real- und Imaginärteile eines komplexen komplexen Typs können mit den Attributen real bzw. imag ermittelt werden. Beides sind Fließkomma-Float-Typen.
c = 3 + 4j
print(c.real)
print(type(c.real))
# 3.0
# <class 'float'>
print(c.imag)
print(type(c.imag))
# 4.0
# <class 'float'>
Sie ist schreibgeschützt und kann nicht geändert werden.
# c.real = 5.5
# AttributeError: readonly attribute
Konjugiert komplexe Zahlen erhalten: conjugate()
Um konjugierte komplexe Zahlen zu erhalten, verwenden Sie die Methode conjugate().
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Ermitteln des Absolutwerts (Betrags) einer komplexen Zahl: abs()
Um den Absolutwert (Betrag) einer komplexen Zahl zu erhalten, verwenden Sie die eingebaute Funktion abs().
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Ermitteln der Deklination (Phase) einer komplexen Zahl: math, cmathModul
Um die Deklination (Phase) einer komplexen Zahl zu erhalten, verwenden Sie das Modul math oder cmath.
Das Modul cmath ist ein mathematisches Funktionsmodul für komplexe Zahlen.
Sie kann mit der Funktion für den inversen Tangens math.atan2() berechnet werden, oder mit cmath.phase(), die die Deklination (Phase) liefert.
import cmath
import math
c = 1 + 1j
print(math.atan2(c.imag, c.real))
# 0.7853981633974483
print(cmath.phase(c))
# 0.7853981633974483
print(cmath.phase(c) == math.atan2(c.imag, c.real))
# True
In beiden Fällen ist die Einheit des Winkels, die man erhalten kann, Bogenmaß. Um in Grad umzurechnen, verwenden Sie math.degrees().
print(math.degrees(cmath.phase(c)))
# 45.0
Polarkoordinatentransformation der komplexen Zahlen (polare formale Darstellung): math, cmathModul
Wie bereits erwähnt, können der Absolutwert (Betrag) und die Deklination (Phase) einer komplexen Zahl ermittelt werden, aber mit cmath.polar() können sie zusammen als ein Tupel (Absolutwert, Deklination) ermittelt werden.
c = 1 + 1j
print(cmath.polar(c))
print(type(cmath.polar(c)))
# (1.4142135623730951, 0.7853981633974483)
# <class 'tuple'>
print(cmath.polar(c)[0] == abs(c))
# True
print(cmath.polar(c)[1] == cmath.phase(c))
# True
Die Umrechnung von Polarkoordinaten in kartesische Koordinaten erfolgt mit cmath.rect(). cmath.rect(Absolutwert, Abweichung) und ähnliche Argumente können verwendet werden, um Werte vom äquivalenten Typ komplexer Komplexe zu erhalten.
print(cmath.rect(1, 1))
# (0.5403023058681398+0.8414709848078965j)
print(cmath.rect(1, 0))
# (1+0j)
print(cmath.rect(cmath.polar(c)[0], cmath.polar(c)[1]))
# (1.0000000000000002+1j)
Real- und Imaginärteil entsprechen den Ergebnissen, die mit cosine math.cos() und sine math.sin() aus Absolutwerten und Deklinationswinkeln berechnet werden.
r = 2
ph = math.pi
print(cmath.rect(r, ph).real == r * math.cos(ph))
# True
print(cmath.rect(r, ph).imag == r * math.sin(ph))
# True
Berechnung von komplexen Zahlen (Quadratur, Potenzen, Quadratwurzeln)
Vier arithmetische Operationen und Potenzberechnungen können mit den üblichen arithmetischen Operatoren durchgeführt werden.
c1 = 3 + 4j
c2 = 2 - 1j
print(c1 + c2)
# (5+3j)
print(c1 - c2)
# (1+5j)
print(c1 * c2)
# (10+5j)
print(c1 / c2)
# (0.4+2.2j)
print(c1 ** 3)
# (-117+44j)
Die Quadratwurzel kann mit **0,5 berechnet werden, aber das führt zu Fehlern. cmath.sqrt() kann verwendet werden, um den genauen Wert zu berechnen.
print((-3 + 4j) ** 0.5)
# (1.0000000000000002+2j)
print((-1) ** 0.5)
# (6.123233995736766e-17+1j)
print(cmath.sqrt(-3 + 4j))
# (1+2j)
print(cmath.sqrt(-1))
# 1j
Sie kann auch arithmetische Operationen mit komplexen Typen, int-Typen und Float-Typen durchführen.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)