Python má standardní typ pro práci s komplexními čísly, typ COMPLEX. Pokud chcete provádět pouze jednoduché výpočty, nemusíte importovat žádné moduly, ale pokud importujete standardní knihovnu cmath, můžete používat i matematické funkce (exponenciální, logaritmické, trigonometrické atd.) odpovídající komplexním číslům.
Následující obsah je zde vysvětlen pomocí ukázkového kódu.
- Generování komplexních proměnných
- Získejte reálné a imaginární části:
real
,imag
atribut - Získat konjugovaná komplexní čísla:
conjugate()
metoda - Získat absolutní hodnotu (magnitudu):
abs()
funkce (např. matematika, programování, programování) - Získání deklinace (fáze):
math
,cmath
modul - Transformace polárních souřadnic (zobrazení v polárním tvaru):
math
,cmath
modul - Výpočet komplexních čísel (kvadratura, mocniny, odmocniny)
- Generování komplexních proměnných
- Získání reálné a imaginární části komplexních čísel: real, imagatribut
- Získat konjugovaná komplexní čísla: conjugate()
- Získání absolutní hodnoty (magnitudy) komplexního čísla: abs()
- Zjištění deklinace (fáze) komplexního čísla: math, cmathmodul
- Polární transformace souřadnic komplexních čísel (polární formální zobrazení): math, cmathmodul
- Výpočet komplexních čísel (kvadratura, mocniny, odmocniny)
Generování komplexních proměnných
Imaginární jednotku označte j a zapište následující, všimněte si, že to není i.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Pokud je imaginární část 1, její vynechání vede k chybě NameError. Pokud je proměnná s názvem j definována jako první, považuje se za ni.
1j
Mělo by to být výslovně uvedeno tímto způsobem.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
Pokud je reálná část rovna 0, lze ji vynechat.
c = 3j
print(c)
# 3j
Pokud chcete definovat hodnotu s imaginární částí 0 jako komplexní komplexní typ, napište explicitně 0. Jak je popsáno níže, lze provádět operace mezi komplexním typem a celočíselným typem nebo typem s pohyblivou řádovou čárkou.
c = 3 + 0j
print(c)
# (3+0j)
Reálnou a imaginární část lze zadat jako typ float s plovoucí desetinnou čárkou. Přípustný je také exponenciální zápis.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
Lze jej také generovat pomocí konstruktoru typu „complex“, jako například „complex(real part, imaginary part)“.
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Získání reálné a imaginární části komplexních čísel: real, imagatribut
Reálnou a imaginární část komplexního typu lze získat pomocí atributů real a imag. Oba jsou typy float s pohyblivou řádovou čárkou.
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'>
Je určena pouze pro čtení a nelze ji měnit.
# c.real = 5.5
# AttributeError: readonly attribute
Získat konjugovaná komplexní čísla: conjugate()
Chcete-li získat konjugovaná komplexní čísla, použijte metodu conjugate().
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Získání absolutní hodnoty (magnitudy) komplexního čísla: abs()
Chcete-li získat absolutní hodnotu (velikost) komplexního čísla, použijte vestavěnou funkci abs().
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Zjištění deklinace (fáze) komplexního čísla: math, cmathmodul
Chcete-li získat deklinaci (fázi) komplexního čísla, použijte modul math nebo cmath.
Modul cmath je modul matematických funkcí pro komplexní čísla.
Lze ji vypočítat pomocí definované funkce inverzní tečna math.atan2() nebo použít funkci cmath.phase(), která vrací deklinaci (fázi).
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
V obou případech je jednotkou úhlu, který lze získat, radián. Pro převod na stupně použijte funkci math.degrees().
print(math.degrees(cmath.phase(c)))
# 45.0
Polární transformace souřadnic komplexních čísel (polární formální zobrazení): math, cmathmodul
Jak bylo uvedeno výše, lze získat absolutní hodnotu (magnitudu) a deklinaci (fázi) komplexního čísla, ale pomocí cmath.polar() je lze získat společně jako tuple (absolutní hodnota, deklinace).
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
Převod z polárních souřadnic na kartézské se provádí pomocí cmath.rect(). cmath.rect(absolutní hodnota, odchylka) a podobné argumenty lze použít k získání hodnot ekvivalentního komplexního typu.
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)
Reálná a imaginární část jsou ekvivalentní výsledkům vypočteným pomocí cosine math.cos() a sine math.sin() z absolutních hodnot a deklinačních úhlů.
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
Výpočet komplexních čísel (kvadratura, mocniny, odmocniny)
Pomocí obvyklých aritmetických operátorů lze provádět čtyři aritmetické operace a mocninné výpočty.
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)
Druhou odmocninu lze vypočítat pomocí **0,5, ale to přináší chybu. cmath.sqrt() lze použít pro výpočet přesné hodnoty.
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
Dokáže také provádět aritmetické operace s komplexními typy, typy int a float.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)