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โมดูล

เพื่อให้ได้ค่าเดคลิเนชัน (เฟส) ของจำนวนเชิงซ้อน ให้ใช้โมดูลคณิตศาสตร์หรือ 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)
Copied title and URL