Python нь нийлмэл тоотой харьцах стандарт төрөл, COMPLEX төрөлтэй. Хэрэв та энгийн тооцоолол хийхийг хүсч байвал ямар ч модулийг импортлох шаардлагагүй, гэхдээ стандарт номын сангийн 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() ба синус 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)