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
,imag
atribut - Pridobite konjugirana kompleksna števila:
conjugate()
metoda - Pridobi absolutno vrednost (magnituda):
abs()
funkcija (npr. matematika, programiranje, programiranje) - Pridobite deklinacijo (fazo):
math
,cmath
modul - Polarna transformacija koordinat (prikaz v polarni obliki):
math
,cmath
modul - Računanje kompleksnih števil (kvadratura, moči, kvadratni koreni)
- Ustvarjanje kompleksnih spremenljivk
- Pridobite realne in imaginarne dele kompleksnih števil: real, imagatribut
- Pridobite konjugirana kompleksna števila: conjugate()
- Določite absolutno vrednost (magnitudo) kompleksnega števila: abs()
- Določite deklinacijo (fazo) kompleksnega števila: math, cmathmodul
- Polarna koordinatna transformacija kompleksnih števil (polarna formalna predstavitev): 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)