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
,imag
taybetmendî - 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
,cmath
module - Veguherîna koordînatên polar (numreya forma polar):
math
,cmath
module - Hesabkirina jimareyên tevlihev (çargoşe, hêz, rehên çargoşe)
- Guherbarên tevlihev biafirînin
- Parçeyên rastîn û xeyalî yên jimareyên tevlihev bistînin:real,imagtaybetmendî
- Jimarên tevlihev ên hevgirtî bistînin:conjugate()
- Nirxa mutlaq (mezinahiya) jimareke tevlihev bistînin:abs()
- Daxistina (qonaxa) jimareke tevlîhev bistînin:math,cmathmodule
- Veguherîna koordînatên polar ên jimareyên tevlihev (nûneriya fermî ya 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)