Python, kompleksne vrste za delo s kompleksnimi števili (absolutne vrednosti, deklinacija, polarne transformacije itd.)

Posel

Python ima standardni tip za ravnanje s kompleksnimi števili, tip COMPLEX. Če želite opravljati le preproste izračune, vam ni treba uvoziti nobenega modula, če pa uvozite standardno knjižnico cmath, lahko uporabite tudi matematične funkcije (eksponentno, logaritemsko, trigonometrično itd.), ki ustrezajo kompleksnim številom.

Naslednja vsebina je razložena z vzorčno kodo.

  • Ustvarjanje kompleksnih spremenljivk
  • Pridobite realne in imaginarne dele:real,imagatribut
  • Pridobite konjugirana kompleksna števila:conjugate()metoda
  • Pridobi absolutno vrednost (magnituda):abs()funkcija (npr. matematika, programiranje, programiranje)
  • Pridobite deklinacijo (fazo):math,cmathmodul
  • Polarna transformacija koordinat (prikaz v polarni obliki):math,cmathmodul
  • Računanje kompleksnih števil (kvadratura, moči, kvadratni koreni)

Ustvarjanje kompleksnih spremenljivk

Imaginarno enoto označimo z j in zapišemo naslednje, pri čemer upoštevamo, da ni i.

c = 3 + 4j

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

Če je imaginarni del enak 1, je posledica njegove izpustitve napaka NameError. Če je spremenljivka z imenom j definirana prva, se šteje, da je to ta spremenljivka.

1j
To je treba izrecno navesti na ta način.

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

c = 3 + 1j

print(c)
# (3+1j)

Če je realni del enak 0, ga lahko izpustite.

c = 3j

print(c)
# 3j

Če želite vrednost z imaginarnim delom 0 opredeliti kot kompleksni kompleksni tip, izrecno zapišite 0. Kot je opisano v nadaljevanju, je mogoče izvajati operacije med kompleksnim tipom in celoštevilskim tipom ali tipom s plavajočo vejico.

c = 3 + 0j

print(c)
# (3+0j)

Realne in imaginarne dele lahko določite kot tip float s plavajočo vejico. Sprejemljiv je tudi eksponentni zapis.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Ustvari ga lahko tudi konstruktor tipa “complex”, kot je “complex(realni del, imaginarni del)”.

c = complex(3, 4)

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

Pridobite realne in imaginarne dele kompleksnih števil: real, imagatribut

Realni in imaginarni del kompleksnega tipa lahko dobite z atributoma real oziroma imag. Oba sta tipa float s spremenljivo vejico.

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 samo za branje in ga ni mogoče spreminjati.

# c.real = 5.5
# AttributeError: readonly attribute

Pridobite konjugirana kompleksna števila: conjugate()

Za pridobitev konjugiranih kompleksnih števil uporabite metodo conjugate().

c = 3 + 4j

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

Določite absolutno vrednost (magnitudo) kompleksnega števila: abs()

Absolutno vrednost (magnitudo) kompleksnega števila dobite z vgrajeno funkcijo abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Določite deklinacijo (fazo) kompleksnega števila: math, cmathmodul

Za določitev deklinacije (faze) kompleksnega števila uporabite modul math ali cmath.

Modul cmath je modul matematičnih funkcij za kompleksna števila.

Izračunamo jo lahko s funkcijo inverznega tangensa math.atan2(), kot je določeno, ali pa uporabimo cmath.phase(), ki vrne deklinacijo (fazo).

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 obeh primerih je enota kota, ki jo lahko dobimo, radians. Za pretvorbo v stopinje uporabite math.degrees().

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

Polarna koordinatna transformacija kompleksnih števil (polarna formalna predstavitev): math, cmathmodul

Kot smo že omenili, lahko dobimo absolutno vrednost (magnitudo) in deklinacijo (fazo) kompleksnega števila, vendar ju lahko z uporabo funkcije cmath.polar() dobimo skupaj kot tuple (absolutna vrednost, deklinacija).

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

Pretvorba iz polarnih koordinat v kartezične koordinate se izvede s cmath.rect(). cmath.rect(absolutna vrednost, odstopanje) in podobne argumente je mogoče uporabiti za pridobitev vrednosti ekvivalentnega kompleksnega kompleksnega tipa.

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)

Realni in imaginarni del sta enakovredna rezultatom, ki jih iz absolutnih vrednosti in kotov deklinacije izračunata cosinus math.cos() in sinus math.sin().

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

Računanje kompleksnih števil (kvadratura, moči, kvadratni koreni)

Štiri aritmetične operacije in izračune moči je mogoče izvesti z običajnimi aritmetičnimi operatorji.

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)

Kvadratni koren se lahko izračuna z **0,5, vendar pri tem pride do napake. cmath.sqrt() se lahko uporabi za izračun natančne vrednosti.

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

Prav tako lahko izvaja aritmetične operacije s kompleksnimi tipi, tipi int in float.

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

print(c1 * 0.5)
# (1.5+2j)