Python dispune de un tip standard pentru gestionarea numerelor complexe, tipul COMPLEX. Dacă doriți doar să faceți calcule simple, nu este necesar să importați niciun modul, dar dacă importați biblioteca standard cmath, puteți utiliza și funcții matematice (exponențiale, logaritmice, trigonometrice etc.) corespunzătoare numerelor complexe.
Următorul conținut este explicat aici cu exemple de cod.
- Generarea de variabile complexe
- Obțineți părțile reale și imaginare:
real
,imag
atribut - Obțineți numere complexe conjugate:
conjugate()
metoda - Obțineți valoarea absolută (magnitudine):
abs()
funcție (de exemplu, matematică, programare, programare) - Obțineți declinația (faza):
math
,cmath
modul - Transformarea coordonatelor polare (reprezentare în formă polară):
math
,cmath
modul - Calculul numerelor complexe (cuadratură, puteri, rădăcini pătrate)
- Generarea de variabile complexe
- Obțineți părțile reale și imaginare ale numerelor complexe: real, imagatribut
- Obțineți numere complexe conjugate: conjugate()
- Obținerea valorii absolute (mărime) a unui număr complex: abs()
- Obținerea declinației (fazei) unui număr complex: math, cmathmodul
- Transformarea în coordonate polare a numerelor complexe (reprezentare formală polară): math, cmathmodul
- Calculul numerelor complexe (cuadratură, puteri, rădăcini pătrate)
Generarea de variabile complexe
Se denumește unitatea imaginară prin j și se scriu următoarele, observând că nu este i.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
În cazul în care partea imaginară este 1, omiterea acesteia are ca rezultat o eroare de nume (NameError). În cazul în care o variabilă numită j este definită prima, se consideră că este acea variabilă.
1j
Acesta ar trebui să fie declarat în mod explicit în acest mod.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
În cazul în care partea reală este 0, aceasta poate fi omisă.
c = 3j
print(c)
# 3j
Dacă doriți să definiți o valoare cu o parte imaginară de 0 ca tip complex complex, scrieți explicit 0. După cum se descrie mai jos, se pot efectua operații între tipul complex și tipul întreg sau tipul cu virgulă mobilă.
c = 3 + 0j
print(c)
# (3+0j)
Părțile reale și imaginare pot fi specificate ca fiind de tip float în virgulă mobilă. Este acceptată și notația exponențială.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
Acesta poate fi generat, de asemenea, de un constructor de tip „complex”, ca în „complex(parte reală, parte imaginară)”.
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Obțineți părțile reale și imaginare ale numerelor complexe: real, imagatribut
Părțile reale și imaginare ale unui tip complex complex pot fi obținute cu ajutorul atributelor real și, respectiv, imag. Ambele sunt tipuri de float în virgulă mobilă.
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'>
Acesta este numai pentru citire și nu poate fi modificat.
# c.real = 5.5
# AttributeError: readonly attribute
Obțineți numere complexe conjugate: conjugate()
Pentru a obține numere complexe conjugate, utilizați metoda conjugate().
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Obținerea valorii absolute (mărime) a unui număr complex: abs()
Pentru a obține valoarea absolută (mărime) a unui număr complex, utilizați funcția încorporată abs().
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Obținerea declinației (fazei) unui număr complex: math, cmathmodul
Pentru a obține declinația (faza) unui număr complex, utilizați modulul math sau cmath.
Modulul cmath este un modul de funcții matematice pentru numere complexe.
Aceasta poate fi calculată cu funcția de tangentă inversă math.atan2(), așa cum este definită, sau se poate folosi cmath.phase(), care returnează declinația (faza).
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
În ambele cazuri, unitatea de măsură a unghiului care poate fi obținută este radianul. Pentru a converti în grade, utilizați math.degrees().
print(math.degrees(cmath.phase(c)))
# 45.0
Transformarea în coordonate polare a numerelor complexe (reprezentare formală polară): math, cmathmodul
După cum s-a menționat mai sus, se pot obține valoarea absolută (magnitudinea) și declinația (faza) unui număr complex, dar folosind cmath.polar(), acestea pot fi obținute împreună sub forma unui tuple (valoare absolută, declinație).
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
Conversia din coordonate polare în coordonate carteziene se face cu ajutorul cmath.rect(). cmath.rect(valoare absolută, abatere) și argumente similare pot fi utilizate pentru a obține valori de tip complex complex echivalent.
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)
Părțile reale și imaginare sunt echivalente cu rezultatele calculate prin cosinus math.cos() și sinus math.sin() din valorile absolute și unghiurile de declinare.
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
Calculul numerelor complexe (cuadratură, puteri, rădăcini pătrate)
Patru operații aritmetice și calcule de putere pot fi efectuate cu ajutorul operatorilor aritmetici obișnuiți.
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)
Rădăcina pătrată poate fi calculată cu **0,5, dar introduce o eroare. cmath.sqrt() poate fi utilizat pentru a calcula valoarea exactă.
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
De asemenea, poate efectua operații aritmetice cu tipuri complexe, tipuri int și tipuri float.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)