18 ธันวาคม 2558

Published ธันวาคม 18, 2558 by with 0 comment

จำนวนเชิงซ้อน (complex numbers) กับภาษาไพทอน

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปตะลุยโลกของคณิตศาสตร์กับภาษาไพทอนกันอีกครั้ง บทความนี้ผมจะกล่าวเกี่ยวกับจำนวนเชิงซ้อน (complex numbers) กับภาษาไพทอนครับ

ทบทวนความรู้เรื่อง จำนวนเชิงซ้อน


จำนวนเชิงซ้อน คือ จำนวนที่เขียนอยู่ในคู่อันดับ (a,b) โดย a & b เป็นจำนวนจริงใดๆ
จำนวนเชิงซ้อน = (a,b)

เรียก a ว่า ส่วนจริง
เรียก b ว่า ส่วนจินตภาพ
ประกอบไปด้วยจำนวนจริง และ จำนวนจินตภาพ

จำนวนเชิงซ้อนในรูปคู่อันดับ (a,b) สามารถเขียนให้อยู่ในรูปหน่วยจินตภาพได้เป็น a+bi

เนื้อหาอื่น ๆ สามารถอ่านได้จากหนังสือคณิตศาสตร์ขั้นสูงตามเนื้อหาที่เรียนในโรงเรียน มหาวิทยาลัย ร้านหนังสือและตามเนื้อหาตามเว็บไซต์ทั่วไป




ในภาษาไพทอน (Python) สามารถใช้ ‘j’ หรือ ‘J’ หลังตัวเลข สร้างส่วนจินตภาพเพื่อสร้างจำนวนเชิงซ้อนได้ อย่างเช่น
>>> 1j
1j
>>> 1J
1j
>>> 1j * 1j
(-1+0j)

ทำไมในภาษาไพทอนถึงใช้ j แทน i ทั้ง ๆ ที่ตามหลักคณิตศาสตร์จำนวนจินตภาพใช้ i ?
เพราะภาษาไพทอนนำ j ที่ใช้กันในวิศวกรไฟฟ้ามาใช้งาน

มีการรายงานบั๊กเสนอให้เปลี่ยนจาก j เป็น i เข้าไปยัง https://bugs.python.org/issue10562 ใน Python 3.3 โดยทาง Guido van Rossum ได้ตอบกลับว่า
"This will not be fixed. For one thing, the letter 'i' or upper case 'I' look too much like digits. The way numbers are parsed either by the language parser (in source code) or by the built-in functions (int, float, complex) should not be localizable or configurable in any way; that's asking for huge disappointments down the road. If you want to parse complex numbers using 'i' instead of 'j', you have plenty of solutions available already."
แล้วสุดท้าย บั๊กนี้ถูกประกาศเป็น wontfix (บั๊กนี้ไม่จำเป็นต้องแก้ไข)

เราสามารถสร้างรูปหน่วยจินตภาพ a+bi จากคู่อันดับจำนวนเชิงซ้อน (a,b) ได้ดัวยคำสั่ง
complex(จำนวนจริง,จำนวนจินตภาพ)

อย่างเช่น
>>> complex(2,3)
(2+3j)

เราสามารถหา สังยุค ส่วนจริง และ ส่วนจินตภาพ ได้ดังนี้
>>> z = 2+3j
>>> z.real # ส่วนจริง
2.0
>>> z.imag # ส่วนจินตภาพ
3.0
>>> z.conjugate() # สังยุค
(2-3j)

ฟังก์ชัน Built-in สามารถใช้งานร่วมกับจำนวนเชิงซ้อนได้ ตัวอย่างเช่น
>>> c = complex(3, 4)
>>> c2 = 3 + 4j
>>> print(c==c2)
True
>>> print(c+c2) # 3 + 4j บวกกับ 3 + 4j
(6+8j)
>>> abs(3 + 4j)
5.0
>>> pow(3 + 4j, 2)
(-7+24j)

สำหรับการดำเนินการทางคณิตศาสตร์ของจำนวนเชิงซ้อน สามารถใช้งานโมดูล cmath เพื่อดำเนินการจำนวนเชิงซ้อนทางคณิตศาสตร์ได้ ตัวอย่างเช่น
>>> import cmath
>>> cmath.sin(2 + 3j)
(9.15449914691143-4.168906959966565j)

อ่านรายละเอียดโมดูล cmath ได้ที่ https://docs.python.org/3/library/cmath.html
ทำไมจึงเห็นเนื้อหาทางวิทยาศาสตร์และคณิตศาสตร์บ่อยมากในบล็อกที่ผมเขียน ?
เนื่องจากผมไม่เคยเป็นโปรแกรมเมอร์ไทย (และไม่อยากใช้คำนี้) และผมไม่ใช่ Geek แต่ผมสนใจวิทยาศาสตร์และคณิตศาสตร์มากเป็นพิเศษ จึงทำให้เห็นเนื้อหาพวกนี้มากเป็นพิเศษครับ ผมจึงขอนำเสนอเนื้อหาทางวิทยาศาสตร์และคณิตศาสตร์ในรูปแบบการเขียนโปรแกรมภาษาไพทอน เพราะผมเชื่อว่า วิทยาศาสตร์ + คณิตศาสตร์ จะช่วยให้โลกหมุนต่อไปได้ไม่สิ้นสุดครับ

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)