Python-да күрделі сандармен жұмыс істеуге арналған стандартты түрі, КҮРДЕЛІ түрі бар. Егер сіз жай ғана қарапайым есептеулерді орындағыңыз келсе, ешқандай модульдерді импорттаудың қажеті жоқ, бірақ стандартты кітапхана cmath импорттасаңыз, күрделі сандарға сәйкес математикалық функцияларды (көрсеткіштік, логарифмдік, тригонометриялық және т.б.) пайдалануға болады.
Төмендегі мазмұн осы жерде үлгі кодымен түсіндіріледі.
- Күрделі айнымалыларды жасаңыз
- Нақты және қиял бөліктерін алыңыз:
real
,imag
атрибут - Біріктірілген күрделі сандарды алыңыз:
conjugate()
әдіс - Абсолютті мәнді алу (магнитуда):
abs()
функция (мысалы, математика, бағдарламалау, бағдарламалау) - Деклинацияны алу (фаза):
math
,cmath
модуль - Полярлық координаталарды түрлендіру (полярлық пішінді көрсету):
math
,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)