Chatu, aina changamano za kufanya kazi na nambari changamano (thamani kamili, mteremko, mabadiliko ya polar, n.k.)

Biashara

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,imagsifa
  • Pata nambari changamano za kuunganisha:conjugate()njia
  • Pata thamani kamili (ukubwa):abs()kazi (k.m. hesabu, programu, upangaji)
  • Pata kukataliwa (awamu):math,cmathmoduli
  • Mabadiliko ya uratibu wa polar (uwakilishi wa umbo la 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)
Copied title and URL