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
โมดูล 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)
ส่วนจริงและส่วนจินตภาพเทียบเท่ากับผลลัพธ์ที่คำนวณโดย cosine 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)