Python, složeni tipovi za rad sa kompleksnim brojevima (apsolutne vrijednosti, deklinacije, polarne transformacije, itd.)

Poslovanje

Python ima standardni tip za rukovanje kompleksnim brojevima, tip COMPLEX. Ako samo želite napraviti jednostavne izračune, ne morate uvoziti nikakve module, ali ako uvezete standardnu ​​biblioteku cmath, možete koristiti i matematičke funkcije (eksponencijalne, logaritamske, trigonometrijske, itd.) koje odgovaraju kompleksnim brojevima.

Sljedeći sadržaj je ovdje objašnjen s uzorkom koda.

  • Generirajte složene varijable
  • Dobijte stvarne i imaginarne dijelove:real,imagatribut
  • Dobiti konjugirane kompleksne brojeve:conjugate()metoda
  • Dobiti apsolutnu vrijednost (veličinu):abs()funkcija (npr. matematika, programiranje, programiranje)
  • Dobiti deklinaciju (faza):math,cmathmodul
  • Transformacija polarnih koordinata (predstava polarnog oblika):math,cmathmodul
  • Računanje kompleksnih brojeva (kvadratura, potenci, kvadratni korijeni)

Generirajte složene varijable

Označite imaginarnu jedinicu sa j i napišite sljedeće, imajte na umu da to nije i.

c = 3 + 4j

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

Ako je imaginarni dio 1, njegovo izostavljanje rezultira NameError. Ako se prva definira varijabla pod nazivom j, smatra se da je ta varijabla.

1j
To treba izričito navesti na ovaj način.

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

c = 3 + 1j

print(c)
# (3+1j)

Ako je pravi dio 0, može se izostaviti.

c = 3j

print(c)
# 3j

Ako želite definirati vrijednost s imaginarnim dijelom 0 kao složeni složeni tip, napišite 0 eksplicitno. Kao što je dolje opisano, operacije se mogu izvoditi između složenog tipa i cjelobrojnog tipa ili tipa s pomičnim zarezom.

c = 3 + 0j

print(c)
# (3+0j)

Realni i imaginarni dijelovi mogu se odrediti kao tip s pomičnim zarezom. Eksponencijalna notacija je također prihvatljiva.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Također ga može generirati konstruktor tipa “kompleks”, kao u “složeni (stvarni dio, imaginarni dio)”.

c = complex(3, 4)

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

Dobiti stvarne i imaginarne dijelove kompleksnih brojeva:real,imagatribut

Realni i imaginarni dijelovi složenog kompleksnog tipa mogu se dobiti s realnim i imaginarnim atributima. Obje su vrste s pomičnim zarezom.

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'>

Može se samo čitati i ne može se mijenjati.

# c.real = 5.5
# AttributeError: readonly attribute

Dobiti konjugirane kompleksne brojeve:conjugate()

Da biste dobili konjugirane kompleksne brojeve, koristite metodu konjugat().

c = 3 + 4j

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

Dobiti apsolutnu vrijednost (veličinu) kompleksnog broja:abs()

Da biste dobili apsolutnu vrijednost (veličinu) kompleksnog broja, koristite ugrađenu funkciju abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Dobiti deklinaciju (fazu) kompleksnog broja:math,cmathmodul

Da biste dobili deklinaciju (fazu) kompleksnog broja, koristite modul matematike ili cmath.

Modul cmath je modul matematičke funkcije za kompleksne brojeve.

Može se izračunati pomoću funkcije inverzne tangente math.atan2() kako je definirano ili koristiti cmath.phase(), koja vraća deklinaciju (fazu).

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

U oba slučaja jedinica kuta koja se može dobiti je radijani. Za pretvaranje u stupnjeve koristite math.degrees().

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

Transformacija polarnih koordinata kompleksnih brojeva (polarni formalni prikaz):math,cmathmodul

Kao što je gore spomenuto, apsolutna vrijednost (veličina) i deklinacija (faza) kompleksnog broja mogu se dobiti, ali pomoću cmath.polar(), mogu se dobiti zajedno kao (apsolutna vrijednost, deklinacija) torka.

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 koordinata u kartezijanske koordinate se vrši pomoću cmath.rect(). cmath.rect(apsolutna vrijednost, odstupanje) i slični argumenti mogu se koristiti za dobivanje vrijednosti ekvivalentnog kompleksnog kompleksnog 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 i imaginarni dijelovi ekvivalentni su rezultatima izračunatim kosinusom math.cos() i sinusom math.sin() iz apsolutnih vrijednosti i kutova deklinacije.

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 brojeva (kvadratura, potenci, kvadratni korijeni)

Četiri aritmetičke operacije i proračuni snage mogu se izvesti pomoću uobičajenih aritmetičkih operatora.

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 korijen može se izračunati s **0,5, ali unosi grešku. cmath.sqrt() može se koristiti za izračunavanje točne vrijednosti.

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

Također može izvoditi aritmetičke operacije sa složenim tipovima, int tipovima i float tipovima.

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

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