Python, складаныя тыпы для працы з комплекснымі лікамі (абсалютныя значэнні, скланенне, палярныя пераўтварэнні і г.д.)

Бізнэс

Python мае стандартны тып для апрацоўкі комплексных лікаў, тып COMPLEX. Калі вы проста хочаце рабіць простыя вылічэнні, вам не трэба імпартаваць якія-небудзь модулі, але калі вы імпартуеце стандартную бібліятэку cmath, вы таксама можаце выкарыстоўваць матэматычныя функцыі (экспанентныя, лагарыфмічныя, трыганаметрычныя і г.д.), якія адпавядаюць комплексным лікам.

Наступнае змест тлумачыцца тут з прыкладам кода.

  • Стварэнне комплексных зменных
  • Атрымаць рэальныя і ўяўныя часткі:real,imagатрыбут
  • Атрымаць спалучаныя комплексныя лікі:conjugate()метад
  • Атрымаць абсалютнае значэнне (вялічыну):abs()функцыя (напрыклад, матэматыка, праграмаванне, праграмаванне)
  • Атрымаць скланенне (фаза):math,cmathмодуль
  • Пераўтварэнне палярных каардынат (прадстаўленне палярнай формы):math,cmathмодуль
  • Вылічэнне комплексных лікаў (квадратура, ступені, квадратныя карані)

Стварэнне комплексных зменных

Абазначце ўяўную адзінку праз j і напішыце наступнае, звярніце ўвагу, што гэта не i.

c = 3 + 4j

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

Калі ўяўная частка роўная 1, яе апушчэнне прывядзе да NameError. Калі зменная з імем j вызначана першай, яна лічыцца гэтай зменнай.

1j
Гэта павінна быць прама сказана такім чынам.

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

c = 3 + 1j

print(c)
# (3+1j)

Калі сапраўдная частка роўная 0, яе можна апусціць.

c = 3j

print(c)
# 3j

Калі вы хочаце вызначыць значэнне з уяўнай часткай 0 як складаны комплексны тып, напішыце 0 відавочна. Як апісана ніжэй, аперацыі можна выконваць паміж складаным тыпам і цэлым тыпам або тыпам з плаваючай кропкай.

c = 3 + 0j

print(c)
# (3+0j)

Рэальныя і ўяўныя часткі могуць быць зададзены як тып з плаваючай кропкай. Экспанентнае абазначэнне таксама прымальна.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Ён таксама можа быць згенераваны канструктарам тыпу “комплекс”, як у “комплекс (рэальная частка, уяўная частка)”.

c = complex(3, 4)

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

Атрымаць рэальныя і ўяўныя часткі комплексных лікаў:real,imagатрыбут

Рэальныя і ўяўныя часткі складанага комплекснага тыпу могуць быць атрыманы з дапамогай атрыбутаў рэальнага і вобразнага адпаведна. Абодва з’яўляюцца тыпамі з плаваючай кропкай.

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

Ён даступны толькі для чытання і не можа быць зменены.

# c.real = 5.5
# AttributeError: readonly attribute

Атрымаць спалучаныя комплексныя лікі:conjugate()

Каб атрымаць спалучаныя комплексныя лікі, выкарыстоўвайце метад conjugate().

c = 3 + 4j

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

Атрымаць абсалютнае значэнне (вялічыну) комплекснага ліку:abs()

Каб атрымаць абсалютнае значэнне (вялічыну) комплекснага ліку, выкарыстоўвайце ўбудаваную функцыю abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Атрымаць скланенне (фазу) комплекснага ліку:math,cmathмодуль

Каб атрымаць скланенне (фазу) комплекснага ліку, выкарыстоўвайце модуль math або cmath.

Модуль cmath — гэта матэматычны функцыйны модуль для комплексных лікаў.

Яго можна вылічыць з дапамогай функцыі зваротнага тангенса math.atan2(), як гэта вызначана, або выкарыстоўваць cmath.phase(), якая вяртае схіленне (фазу).

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

У абодвух выпадках адзінка вугла, якую можна атрымаць, — радыяны. Для пераўтварэння ў градусы выкарыстоўвайце math.degrees().

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

Пераўтварэнне палярных каардынат комплексных лікаў (палярнае фармальнае ўяўленне):math,cmathмодуль

Як ужо згадвалася вышэй, можна атрымаць абсалютнае значэнне (вялічыну) і схіленне (фаза) комплекснага ліку, але з дапамогай cmath.polar() іх можна атрымаць разам у выглядзе (абсалютнага значэння, скланення) картэжа.

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

Ператварэнне з палярных каардынат у дэкартавыя каардынаты ажыццяўляецца з дапамогай cmath.rect(). cmath.rect(абсалютнае значэнне, адхіленне) і падобныя аргументы могуць быць выкарыстаны для атрымання значэнняў эквівалентнага комплекснага комплекснага тыпу.

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)

Рэальная і ўяўная часткі эквівалентныя вынікам, вылічаным косінусамі math.cos() і сінусамі math.sin() з абсалютных значэнняў і кутоў скланення.

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

Вылічэнне комплексных лікаў (квадратура, ступені, квадратныя карані)

З дапамогай звычайных арыфметычных аператараў можна выканаць чатыры арыфметычныя аперацыі і вылічэнні магутнасці.

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)

Квадратны корань можа быць вылічаны з **0,5, але гэта ўносіць памылку. cmath.sqrt() можна выкарыстоўваць для вылічэння дакладнага значэння.

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

Ён таксама можа выконваць арыфметычныя аперацыі са складанымі тыпамі, тыпамі int і тыпамі float.

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

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