Python, komplexní typy pro práci s komplexními čísly (absolutní hodnoty, deklinace, polární transformace atd.)

Podnikání

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,imagatribut
  • 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,cmathmodul
  • Transformace polárních souřadnic (zobrazení v polárním tvaru):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)
Copied title and URL