Python, komplexné typy na prácu s komplexnými číslami (absolútne hodnoty, deklinácia, polárne transformácie atď.)

obchodné

Python má štandardný typ na prácu s komplexnými číslami, typ COMPLEX. Ak chcete vykonávať len jednoduché výpočty, nemusíte importovať žiadne moduly, ale ak importujete štandardnú knižnicu cmath, môžete používať aj matematické funkcie (exponenciálne, logaritmické, trigonometrické atď.) zodpovedajúce komplexným číslam.

Tu je vysvetlený nasledujúci obsah so vzorovým kódom.

  • Generovanie komplexných premenných
  • Získajte skutočné a imaginárne časti:real,imagatribút
  • Získajte konjugované komplexné čísla:conjugate()metóda
  • Získanie absolútnej hodnoty (magnitúda):abs()funkcie (napr. matematika, programovanie, programovanie)
  • Získanie deklinácie (fázy):math,cmathmodul
  • Polárna transformácia súradníc (zobrazenie v polárnom tvare):math,cmathmodul
  • Výpočet komplexných čísel (kvadratúra, mocniny, odmocniny)

Generovanie komplexných premenných

Imaginárnu jednotku označte j a napíšte nasledujúci zápis, všimnite si, že to nie je i.

c = 3 + 4j

print(c)
print(type(c))
# (3+4j)
# <class 'complex'>

Ak je imaginárna časť 1, jej vynechanie vedie k chybe NameError. Ak je premenná s názvom j definovaná ako prvá, považuje sa za ňu.

1j
Malo by sa to výslovne uviesť týmto spôsobom.

# c = 3 + j
# NameError: name 'j' is not defined

c = 3 + 1j

print(c)
# (3+1j)

Ak je reálna časť rovná 0, možno ju vynechať.

c = 3j

print(c)
# 3j

Ak chcete definovať hodnotu s imaginárnou časťou 0 ako komplexný komplexný typ, napíšte explicitne 0. Ako je popísané ďalej, operácie možno vykonávať medzi komplexným typom a celočíselným typom alebo typom s pohyblivou rádovou čiarkou.

c = 3 + 0j

print(c)
# (3+0j)

Reálnu a imaginárnu časť možno zadať ako typ float s pohyblivou desatinnou čiarkou. Prípustný je aj exponenciálny zápis.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Môže byť tiež vytvorený konštruktorom typu „complex“, ako napríklad „complex(real part, imaginary part)“.

c = complex(3, 4)

print(c)
print(type(c))
# (3+4j)
# <class 'complex'>

Získajte reálne a imaginárne časti komplexných čísel: real, imagatribút

Reálnu a imaginárnu časť komplexného typu možno získať pomocou atribútov real a imag. Oba typy sú typy float s pohyblivou desatinnou čiarkou.

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čený len na čítanie a nemožno ho meniť.

# c.real = 5.5
# AttributeError: readonly attribute

Získajte konjugované komplexné čísla: conjugate()

Ak chcete získať konjugované komplexné čísla, použite metódu conjugate().

c = 3 + 4j

print(c.conjugate())
# (3-4j)

Získanie absolútnej hodnoty (veľkosti) komplexného čísla: abs()

Ak chcete získať absolútnu hodnotu (veľkosť) komplexného čísla, použite vstavanú funkciu abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Získanie deklinácie (fázy) komplexného čísla: math, cmathmodul

Ak chcete získať deklináciu (fázu) komplexného čísla, použite modul math alebo cmath.

Modul cmath je modul matematických funkcií pre komplexné čísla.

Možno ju vypočítať pomocou definovanej funkcie inverzného tangensu math.atan2() alebo použiť funkciu cmath.phase(), ktorá vráti deklináciu (fázu).

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 oboch prípadoch je jednotkou uhla, ktorý možno získať, radián. Na prevod na stupne použite math.degrees().

print(math.degrees(cmath.phase(c)))
# 45.0

Polárna transformácia súradníc komplexných čísel (polárna formálna reprezentácia): math, cmathmodul

Ako bolo uvedené vyššie, absolútnu hodnotu (magnitúdu) a deklináciu (fázu) komplexného čísla možno získať, ale pomocou funkcie cmath.polar() ich možno získať spoločne ako tuple (absolútna hodnota, deklinácia).

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

Prevod z polárnych súradníc na karteziánske sa vykonáva pomocou cmath.rect(). cmath.rect(absolútna hodnota, odchýlka) a podobné argumenty možno použiť na získanie hodnôt 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álne a imaginárne časti sú ekvivalentné výsledkom vypočítaným pomocou cosine math.cos() a sine math.sin() z absolútnych hodnôt a deklinačných uhlov.

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 (kvadratúra, mocniny, odmocniny)

Pomocou bežných aritmetických operátorov možno vykonávať štyri aritmetické operácie a mocninové 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)

Druhú odmocninu možno vypočítať pomocou **0,5, ale spôsobuje to chybu. na výpočet presnej hodnoty možno použiť cmath.sqrt().

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 tiež vykonávať aritmetické operácie s komplexnými typmi, typmi int a typmi float.

print(c1 + 3)
# (6+4j)

print(c1 * 0.5)
# (1.5+2j)
Copied title and URL