Python, lloje komplekse për të punuar me numra kompleksë (vlera absolute, deklinacion, transformime polare, etj.)

biznes

Python ka një tip standard për trajtimin e numrave kompleks, llojin KOMPLEX. Nëse dëshironi të bëni vetëm llogaritje të thjeshta, nuk keni nevojë të importoni asnjë modul, por nëse importoni cmath standarde të bibliotekës, mund të përdorni edhe funksione matematikore (eksponenciale, logaritmike, trigonometrike, etj.) që korrespondojnë me numrat kompleks.

Përmbajtja e mëposhtme shpjegohet këtu me kodin e mostrës.

  • Gjeneroni variabla komplekse
  • Merrni pjesë reale dhe imagjinare:real,imagatribut
  • Merrni numra komplekse të konjuguar:conjugate()metodë
  • Merrni vlerën absolute (madhësinë):abs()funksion (p.sh. matematikë, programim, programim)
  • Marrja e deklinimit (faza):math,cmathmodul
  • Transformimi i koordinatave polare (përfaqësimi i formës polare):math,cmathmodul
  • Llogaritja e numrave kompleksë (kuadratura, fuqitë, rrënjët katrore)

Gjeneroni variabla komplekse

Shënoni njësinë imagjinare me j dhe shkruani sa vijon, vini re se nuk është i.

c = 3 + 4j

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

Nëse pjesa imagjinare është 1, heqja e saj rezulton në një Gabim Emri. Nëse së pari përcaktohet një ndryshore me emrin j, ajo konsiderohet të jetë ajo ndryshore.

1j
Duhet të shprehet qartë në këtë mënyrë.

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

c = 3 + 1j

print(c)
# (3+1j)

Nëse pjesa reale është 0, ajo mund të hiqet.

c = 3j

print(c)
# 3j

Nëse dëshironi të përcaktoni një vlerë me një pjesë imagjinare të 0 si një lloj kompleks kompleks, shkruani 0 në mënyrë eksplicite. Siç përshkruhet më poshtë, operacionet mund të kryhen midis tipit kompleks dhe tipit të plotë ose tipit me pikë lundruese.

c = 3 + 0j

print(c)
# (3+0j)

Pjesët reale dhe imagjinare mund të specifikohen si tip float me pikë lundruese. Shënimi eksponencial është gjithashtu i pranueshëm.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Mund të gjenerohet gjithashtu nga një konstruktor i tipit “kompleks”, si në “kompleks(pjesë reale, pjesë imagjinare)”.

c = complex(3, 4)

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

Merrni pjesë reale dhe imagjinare të numrave kompleksë:real,imagatribut

Pjesët reale dhe imagjinare të një lloji kompleks kompleks mund të merren përkatësisht me atributet reale dhe imazhore. Të dyja janë lloje notuese me pikë lundruese.

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

Lexohet vetëm dhe nuk mund të ndryshohet.

# c.real = 5.5
# AttributeError: readonly attribute

Merrni numra komplekse të konjuguar:conjugate()

Për të marrë numra komplekse të konjuguar, përdorni metodën conjugate().

c = 3 + 4j

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

Merrni vlerën (madhësinë) absolute të një numri kompleks:abs()

Për të marrë vlerën (madhësinë) absolute të një numri kompleks, përdorni funksionin e integruar abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Merrni deklinalin (fazën) e një numri kompleks:math,cmathmodul

Për të marrë deklinimin (fazën) e një numri kompleks, përdorni modulin matematikë ose cmath.

Moduli cmath është një modul funksioni matematikor për numrat kompleks.

Mund të llogaritet me funksionin e anasjelltë tangjente math.atan2() siç përcaktohet, ose të përdor cmath.phase(), e cila kthen deklinimin (fazën).

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ë të dyja rastet, njësia e këndit që mund të merret është radianet. Për të kthyer në gradë, përdorni math.degrees().

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

Transformimi i koordinatave polare të numrave kompleks (paraqitja formale polare):math,cmathmodul

Siç u përmend më lart, vlera absolute (madhësia) dhe deklinimi (faza) e një numri kompleks mund të merren, por duke përdorur cmath.polar(), ato mund të përftohen së bashku si një tufë (vlerë absolute, deklinacion).

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

Shndërrimi nga koordinatat polare në koordinatat karteziane bëhet duke përdorur cmath.rect(). cmath.rect (vlera absolute, devijimi) dhe argumente të ngjashme mund të përdoren për të marrë vlera të tipit kompleks kompleks ekuivalent.

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)

Pjesët reale dhe imagjinare janë ekuivalente me rezultatet e llogaritura nga kosinusi math.cos() dhe sinus math.sin() nga vlerat absolute dhe këndet e deklinimit.

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

Llogaritja e numrave kompleksë (kuadratura, fuqitë, rrënjët katrore)

Katër operacione aritmetike dhe llogaritjet e fuqisë mund të kryhen duke përdorur operatorët e zakonshëm aritmetikë.

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)

Rrënja katrore mund të llogaritet me **0.5, por paraqet gabim. cmath.sqrt() mund të përdoret për të llogaritur vlerën e saktë.

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

Ai gjithashtu mund të kryejë operacione aritmetike me lloje komplekse, tipe int dhe lloje float.

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

print(c1 * 0.5)
# (1.5+2j)
Copied title and URL