Python, celebên tevlihev ên ku bi jimareyên tevlihev re dixebitin (nirxên bêkêmasî, daketin, veguherînên polar, hwd.)

Dikan

Python ji bo birêvebirina hejmarên tevlihev celebek standard heye, celebê COMPLEX. Heke hûn tenê dixwazin hesabên hêsan bikin, hûn ne hewce ne ku tu modulan derxînin, lê heke hûn cmath-a pirtûkxaneya standard îtxal bikin, hûn dikarin fonksiyonên matematîkî jî (berfireh, logarîtmîk, trigonometrik, hwd.) yên ku bi hejmarên tevlihev re têkildar in bikar bînin.

Naveroka jêrîn bi koda nimûneyê li vir têne rave kirin.

  • Guherbarên tevlihev biafirînin
  • Parçeyên rastîn û xeyalî bistînin:real,imagtaybetmendî
  • Jimarên tevlihev ên hevgirtî bistînin:conjugate()awa
  • Nirxa bêkêmasî (mezinahî) bistînin:abs()fonksiyon (mînak matematîk, bername, bername)
  • Veguheztin (qonaxa):math,cmathmodule
  • Veguherîna koordînatên polar (numreya forma polar):math,cmathmodule
  • Hesabkirina jimareyên tevlihev (çargoşe, hêz, rehên çargoşe)

Guherbarên tevlihev biafirînin

Yekîneya xeyalî bi j nîşan bide û ya jêrîn binivîsîne, bala xwe bide ku ew ne i ye.

c = 3 + 4j

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

Ger beşa xeyalî 1 be, jêbirina wê dibe sedema NameError. Ger guherbareke bi nave j ewil were terîfkirin, ew guherbar e.

1j
Divê bi awayekî eşkere bi vî rengî bê gotin.

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

c = 3 + 1j

print(c)
# (3+1j)

Ger beşa rastîn 0 be, ew dikare were derxistin.

c = 3j

print(c)
# 3j

Heke hûn dixwazin nirxek bi beşek xeyalî ya 0-ê wekî celebek tevlihev a tevlihev diyar bikin, 0 eşkere binivîsin. Wekî ku li jêr tê diyar kirin, operasyon dikarin di navbera celebê tevlihev û tîpa yekjimar an celebê xala hêlînê de bêne kirin.

c = 3 + 0j

print(c)
# (3+0j)

Parçeyên rastîn û xeyalî dikarin wekî celebê float-xala hêlînê werin destnîşan kirin. Nîşana berbiçav jî tê qebûl kirin.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Di heman demê de ew dikare ji hêla avakerek celebê “tevlihev” ve jî were çêkirin, wekî “tevlihev (beşa rastîn, beşa xeyalî)”.

c = complex(3, 4)

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

Parçeyên rastîn û xeyalî yên jimareyên tevlihev bistînin:real,imagtaybetmendî

Parçeyên rastîn û xeyalî yên celebek tevlihev a tevlihev, bi rêzê, bi taybetmendiyên rastîn û wêneyê têne wergirtin. Her du jî celebên float-xala hêlînê ne.

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

Ew tenê tê xwendin û nayê guhertin.

# c.real = 5.5
# AttributeError: readonly attribute

Jimarên tevlihev ên hevgirtî bistînin:conjugate()

Ji bo bidestxistina jimareyên tevlîhev ên hevedudanî, rêbaza hevedudanî() bikar bînin.

c = 3 + 4j

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

Nirxa mutlaq (mezinahiya) jimareke tevlihev bistînin:abs()

Ji bo bidestxistina nirxa mutleq (mezinahî) ya hejmarek tevlihev, fonksiyona çêkirî ya abs() bikar bînin.

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Daxistina (qonaxa) jimareke tevlîhev bistînin:math,cmathmodule

Ji bo bidestxistina dakêşana (qonaxa) hejmarek tevlihev, modula matematîkî an cmath bikar bînin.

Modula cmath modulek fonksiyona matematîkî ya ji bo hejmarên tevlihev e.

Ew dikare bi fonksiyona tangenta berevajî math.atan2() ya ku hatî destnîşan kirin were hesibandin, an jî cmath.phase() bikar bîne, ku veqetandinê (qonaxê) vedigerîne.

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

Di her du rewşan de, yekeya goşeyê ku dikare were bidestxistin radians e. Ji bo veguhertina dereceyan, math.degrees() bikar bînin.

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

Veguherîna koordînatên polar ên jimareyên tevlihev (nûneriya fermî ya polar):math,cmathmodule

Weke ku li jor hat behs kirin, nirxa mutleq (mezinahî) û daketina (qonaxa) jimareyek tevlihev dikare were bidestxistin, lê bi karanîna cmath.polar(), ew dikarin bi hev re wekî tîrêjek (nirxa mutleq, dakêşîn) werin bidestxistin.

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

Veguherîna ji koordînatên polar bo koordînatên Cartesian bi cmath.rect() tê kirin. cmath.rect (nirxa bêkêmasî, deviasyon) û argûmanên bi vî rengî dikarin werin bikar anîn da ku nirxên celebê tevlihev ên tevlihev ên wekhev bistînin.

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)

Parçeyên rastîn û xeyalî bi encamên ku ji hêla matematîka kosînesê ve têne hejmartin.cos() û math.sin() ji nirxên mutleq û goşeyên veqetandinê re hevwate ne.

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

Hesabkirina jimareyên tevlihev (çargoşe, hêz, rehên çargoşe)

Çar operasyonên jimareyî û hesabên hêzê dikarin bi karanîna operatorên jimartinê yên asayî bêne kirin.

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)

Roka çargoşe dikare bi **0.5 were hesibandin, lê ew xeletiyê destnîşan dike. cmath.sqrt() dikare were bikar anîn da ku nirxa rastîn hesab bike.

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

Di heman demê de ew dikare bi celebên tevlihev, celebên int û celebên float re operasyonên jimareyî jî pêk bîne.

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

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