Python, күрделі сандармен жұмыс істеуге арналған күрделі типтер (абсолюттік мәндер, ауытқулар, полярлық түрлендірулер және т.б.)

Іскерлік

Python-да күрделі сандармен жұмыс істеуге арналған стандартты түрі, КҮРДЕЛІ түрі бар. Егер сіз жай ғана қарапайым есептеулерді орындағыңыз келсе, ешқандай модульдерді импорттаудың қажеті жоқ, бірақ стандартты кітапхана 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модуль

Күрделі санның ауытқуын (фазасын) алу үшін математикалық немесе смат модулін пайдаланыңыз.

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)

Нақты және қиял бөліктері абсолютті мәндер мен ауытқу бұрыштарынан cosinus math.cos() және sine 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 типтерімен және қалқымалы типтермен арифметикалық амалдарды орындай алады.

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

print(c1 * 0.5)
# (1.5+2j)