Python, tipuri complexe pentru a lucra cu numere complexe (valori absolute, declinație, transformări polare, etc.)

Afaceri

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,imagatribut
  • 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,cmathmodul
  • Transformarea coordonatelor polare (reprezentare în formă 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)
Copied title and URL