Python ina aina ya kawaida ya kushughulikia nambari changamano, aina COMPLEX. Ikiwa unataka tu kufanya mahesabu rahisi, huna haja ya kuagiza moduli yoyote, lakini ikiwa unaagiza cmath ya maktaba ya kawaida, unaweza pia kutumia kazi za hisabati (kielelezo, logarithmic, trigonometric, nk) sambamba na nambari changamano.
Yaliyomo yafuatayo yamefafanuliwa hapa na nambari ya sampuli.
- Tengeneza vigezo changamano
- Pata sehemu za kweli na za kufikiria:
real
,imag
sifa - Pata nambari changamano za kuunganisha:
conjugate()
njia - Pata thamani kamili (ukubwa):
abs()
kazi (k.m. hesabu, programu, upangaji) - Pata kukataliwa (awamu):
math
,cmath
moduli - Mabadiliko ya uratibu wa polar (uwakilishi wa umbo la polar):
math
,cmath
moduli - Uhesabuji wa nambari changamano (quadrature, nguvu, mizizi ya mraba)
- Tengeneza vigezo changamano
- Pata sehemu halisi na za kuwazia za nambari changamano:real,imagsifa
- Pata nambari changamano za kuunganisha:conjugate()
- Pata thamani kamili (ukubwa) ya nambari changamano:abs()
- Pata kukataliwa (awamu) ya nambari changamano:math,cmathmoduli
- Mabadiliko ya uratibu wa polar ya nambari changamano (uwakilishi rasmi wa polar):math,cmathmoduli
- Uhesabuji wa nambari changamano (quadrature, nguvu, mizizi ya mraba)
Tengeneza vigezo changamano
Onyesha kitengo cha kufikiria kwa j na uandike yafuatayo, kumbuka kuwa sio i.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Ikiwa sehemu ya kufikiria ni 1, kuiacha kunasababisha JinaError. Ikiwa kigezo kiitwacho j kinafafanuliwa kwanza, kinachukuliwa kuwa kigezo hicho.
1j
Inapaswa kusemwa wazi kwa njia hii.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
Ikiwa sehemu halisi ni 0, inaweza kuachwa.
c = 3j
print(c)
# 3j
Ikiwa unataka kufafanua thamani iliyo na sehemu ya kuwazia ya 0 kama aina changamano, andika 0 waziwazi. Kama ilivyoelezwa hapa chini, shughuli zinaweza kufanywa kati ya aina changamano na aina kamili au aina ya sehemu inayoelea.
c = 3 + 0j
print(c)
# (3+0j)
Sehemu halisi na za kufikiria zinaweza kubainishwa kama aina ya kuelea ya sehemu zinazoelea. Alama ya kielelezo pia inakubalika.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
Inaweza pia kuzalishwa na mjenzi wa aina ya “tata”, kama katika “tata (sehemu halisi, sehemu ya kufikiria)”.
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Pata sehemu halisi na za kuwazia za nambari changamano:real,imagsifa
Sehemu za kweli na za kufikiria za aina tata zinaweza kupatikana kwa sifa halisi na za picha, kwa mtiririko huo. Zote ni aina za kuelea za sehemu ya kuelea.
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'>
Inasomwa tu na haiwezi kubadilishwa.
# c.real = 5.5
# AttributeError: readonly attribute
Pata nambari changamano za kuunganisha:conjugate()
Ili kupata nambari changamano za kuunganisha, tumia njia ya conjugate() .
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Pata thamani kamili (ukubwa) ya nambari changamano:abs()
Ili kupata thamani kamili (ukubwa) ya nambari changamano, tumia chaguo la kukokotoa lililojengewa ndani abs().
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Pata kukataliwa (awamu) ya nambari changamano:math,cmathmoduli
Ili kupata mkataa (awamu) wa nambari changamano, tumia moduli ya hesabu au cmath.
Moduli ya cmath ni moduli ya kazi ya hisabati kwa nambari changamano.
Inaweza kukokotwa na chaguo za kukokotoa za tanjiti kinyume math.atan2() jinsi inavyofafanuliwa, au kutumia cmath.phase(), ambayo inarejesha mkataa (awamu).
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
Katika visa vyote viwili, kitengo cha pembe ambacho kinaweza kupatikana ni radians. Ili kubadilisha hadi digrii, tumia math.degrees().
print(math.degrees(cmath.phase(c)))
# 45.0
Mabadiliko ya uratibu wa polar ya nambari changamano (uwakilishi rasmi wa polar):math,cmathmoduli
Kama ilivyoelezwa hapo juu, thamani kamili (ukubwa) na kupungua (awamu) ya nambari changamano inaweza kupatikana, lakini kwa kutumia cmath.polar(), zinaweza kupatikana pamoja kama (thamani kamili, mteremko).
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
Ubadilishaji kutoka kwa kuratibu za polar hadi kuratibu za Cartesian hufanywa kwa kutumia cmath.rect(). cmath.rect(thamani kamili, mkengeuko) na hoja sawia zinaweza kutumika kupata thamani za aina changamano changamano sawa.
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)
Sehemu halisi na dhahania ni sawa na matokeo yaliyokokotolewa na cosine math.cos() na sine math.sin() kutoka kwa thamani kamili na pembe za kupungua.
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
Uhesabuji wa nambari changamano (quadrature, nguvu, mizizi ya mraba)
Shughuli nne za hesabu na hesabu za nguvu zinaweza kufanywa kwa kutumia waendeshaji wa kawaida wa hesabu.
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)
Mizizi ya mraba inaweza kuhesabiwa na **0.5, lakini inaleta makosa. cmath.sqrt() inaweza kutumika kukokotoa thamani halisi.
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
Inaweza pia kufanya shughuli za hesabu na aina changamano, aina za int, na aina za kuelea.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)