ข้ามไปเนื้อหา

SymPy

จากวิกิพีเดีย สารานุกรมเสรี
SymPy
นักพัฒนาทีมพัฒนา SymPy
วันที่เปิดตัว2007; 19 ปีที่แล้ว (2007)
รุ่นเสถียร
1.14.0 / 27 เมษายน 2025; 14 เดือนก่อน (2025-04-27)
ที่เก็บข้อมูล
ภาษาที่เขียนภาษาไพทอน
ระบบปฏิบัติการข้ามแพลตฟอร์ม
ประเภทระบบพีชคณิตคอมพิวเตอร์, ไลบรารีคณิตศาสตร์
สัญญาอนุญาตBSD 3-Clause
เว็บไซต์www.sympy.org

SymPy เป็นไลบรารีโอเพนซอร์สภาษาไพทอนสำหรับการคำนวณเชิงสัญลักษณ์และระบบพีชคณิตคอมพิวเตอร์ ใช้สำหรับจัดการนิพจน์ทางคณิตศาสตร์ในรูปสัญลักษณ์ เช่น พหุนาม เศษส่วน ฟังก์ชัน สมการ เมทริกซ์ และนิพจน์ทางแคลคูลัส[1][2] ความสามารถหลักของโครงการครอบคลุมการลดรูปนิพจน์ การกระจายพหุนาม การแยกตัวประกอบ การหาอนุพันธ์ ปริพันธ์ ลิมิต การแก้สมการ พีชคณิตเชิงเส้น คณิตศาสตร์ไม่ต่อเนื่อง และการพิมพ์ผลลัพธ์เป็นรูปแบบต่าง ๆ เช่น LaTeX[2][3]

SymPy เขียนด้วยภาษา Python เป็นหลัก และมีเป้าหมายเป็นระบบพีชคณิตคอมพิวเตอร์ที่มีความสามารถครบถ้วน ขณะเดียวกันยังรักษาโค้ดให้เรียบง่าย เข้าใจได้ และขยายต่อได้ง่าย[1][3] ต่างจากระบบพีชคณิตคอมพิวเตอร์ขนาดใหญ่บางระบบ SymPy สามารถใช้เป็นไลบรารีภายในโปรแกรม Python อื่น ใช้แบบโต้ตอบผ่าน Python หรือ IPython หรือใช้ผ่านสภาพแวดล้อมบนเว็บ เช่น SymPy Live และ SymPy Gamma ได้[4][5]

ณ เดือนกรกฎาคม ค.ศ. 2026 รุ่นล่าสุดของ SymPy คือ 1.14.0 เผยแพร่เมื่อวันที่ 27 เมษายน ค.ศ. 2025[6] และเผยแพร่ผ่าน Python Package Index[7] SymPy เผยแพร่ภายใต้สัญญาอนุญาต BSD และเป็นไลบรารีเชิงสัญลักษณ์ที่เป็นที่รู้จักในระบบนิเวศ scientific Python[3]

ไม่ควรสับสน SymPy กับ SimPy ซึ่งเป็นเฟรมเวิร์กภาษา Python สำหรับการจำลองเหตุการณ์ไม่ต่อเนื่อง ชื่อของทั้งสองโครงการคล้ายกัน แต่มีวัตถุประสงค์ต่างกัน คือ SymPy ใช้คำนวณเชิงสัญลักษณ์ ส่วน SimPy ใช้จำลองกระบวนการและเหตุการณ์ตามเวลา[8]

ชื่อ

[แก้]

ชื่อ SymPy มาจากคำว่า Symbolic Python หรือ “ไพทอนเชิงสัญลักษณ์” สะท้อนบทบาทของโครงการในฐานะไลบรารี Python สำหรับจัดการนิพจน์ทางคณิตศาสตร์ในรูปสัญลักษณ์ แทนที่จะคำนวณเป็นค่าตัวเลขเพียงอย่างเดียว[1]

ตัวอย่างเช่น การคำนวณเชิงตัวเลขอาจประเมินค่า sqrt(8) เป็นเลขทศนิยมประมาณ 2.828... แต่การคำนวณเชิงสัญลักษณ์สามารถเก็บนิพจน์ดังกล่าวไว้ในรูป sqrt(8) หรือลดรูปเป็น 2*sqrt(2) ได้ นิพจน์เช่น x**2 + 2*x + 1 ยังสามารถเก็บไว้ในรูปพีชคณิตเพื่อแยกตัวประกอบ หาอนุพันธ์ หรือแทนค่าในภายหลัง

ประวัติ

[แก้]

SymPy เริ่มต้นโดยออนเดรย์ เชอร์ติก (Ondřej Čertík) ใน ค.ศ. 2005 และพัฒนาต่อมาเป็นระบบพีชคณิตคอมพิวเตอร์เสรีที่เขียนด้วยภาษา Python[9] แนวคิดสำคัญในช่วงต้นคือการสร้างระบบพีชคณิตคอมพิวเตอร์ที่เขียนด้วย Python ล้วน เพื่อให้ติดตั้งง่าย อ่านซอร์สโค้ดได้ง่าย และเหมาะกับการศึกษาและการขยายต่อ[9][3]

ใน ค.ศ. 2011 เชอร์ติกส่งต่อบทบาทผู้นำโครงการให้แอรอน เมอเรอร์ (Aaron Meurer)[10] ตลอดช่วงพัฒนาของโครงการ SymPy มีผู้ร่วมพัฒนาจำนวนมาก และได้รับประโยชน์จากชุมชนโอเพนซอร์ส รวมถึงโครงการ Google Summer of Code หลายครั้ง[3]

ใน ค.ศ. 2017 บทความ “SymPy: symbolic computing in Python” ตีพิมพ์ในวารสาร PeerJ Computer Science บทความดังกล่าวอธิบายสถาปัตยกรรม คุณสมบัติ และโมดูลสำคัญของ SymPy และระบุว่า SymPy เป็นระบบพีชคณิตคอมพิวเตอร์โอเพนซอร์สที่เขียนด้วย Python โดยเน้นความขยายได้และความสะดวกในการใช้งานทั้งแบบโต้ตอบและแบบเป็นไลบรารีในโปรแกรมอื่น[3]

แนวคิดพื้นฐาน

[แก้]

การคำนวณเชิงสัญลักษณ์ต่างจากการคำนวณเชิงตัวเลขตรงที่ระบบไม่ได้ให้เพียงคำตอบเป็นเลขประมาณ แต่พยายามรักษาโครงสร้างทางคณิตศาสตร์ไว้ ตัวอย่างเช่น นิพจน์ เศษส่วน ราก สมการ เมทริกซ์ หรือฟังก์ชันสามารถถูกจัดเก็บและแปลงรูปในเชิงพีชคณิตได้[2]

ใน SymPy ผู้ใช้มักเริ่มจากการประกาศสัญลักษณ์ แล้วสร้างนิพจน์จากสัญลักษณ์เหล่านั้น เช่น:

from sympy import symbols, expand, factor

x = symbols('x')
expr = (x + 1)**2

print(expand(expr))
print(factor(x**2 + 2*x + 1))

ตัวอย่างนี้แสดงการกระจายและแยกตัวประกอบนิพจน์ทางพีชคณิต ผลลัพธ์ไม่ได้เป็นเพียงค่าตัวเลข แต่เป็นนิพจน์ที่ยังจัดการต่อได้ เช่น หาอนุพันธ์ ปริพันธ์ แก้สมการ หรือแปลงเป็น LaTeX

คุณสมบัติ

[แก้]

SymPy มีความสามารถครอบคลุมหลายด้านของคณิตศาสตร์เชิงสัญลักษณ์ ตั้งแต่การจัดการนิพจน์พื้นฐานไปจนถึงโมดูลเฉพาะทาง เอกสารและบทความทางวิชาการของโครงการกล่าวถึงความสามารถหลัก เช่น พีชคณิต แคลคูลัส เมทริกซ์ คณิตศาสตร์ไม่ต่อเนื่อง เรขาคณิต ฟิสิกส์ สถิติ การพิมพ์ผลลัพธ์ และการสร้างโค้ด[2][3]

พีชคณิตและนิพจน์พื้นฐาน

[แก้]

SymPy สามารถจัดการนิพจน์ทางพีชคณิต เช่น การลดรูป การกระจาย การแยกตัวประกอบ การแทนค่า การจัดการพหุนาม การแยกเศษส่วนย่อย และการทำงานกับรากของพหุนาม[11] ตัวอย่างเช่น:

from sympy import symbols, expand, factor, simplify

x = symbols('x')
expr = (x + 2) * (x - 2)

print(expand(expr))
print(factor(x**2 - 4))
print(simplify((x**2 - 4) / (x - 2)))

ความสามารถเหล่านี้ทำให้ SymPy ใช้ได้ทั้งในการเรียนพีชคณิต การตรวจสอบผลลัพธ์ทางคณิตศาสตร์ และการสร้างนิพจน์เพื่อนำไปใช้ในโค้ดเชิงตัวเลข

แคลคูลัส

[แก้]

SymPy รองรับการคำนวณทางแคลคูลัส เช่น ลิมิต อนุพันธ์ ปริพันธ์ อนุกรม และการแก้สมการเชิงอนุพันธ์บางชนิด[12] ตัวอย่างเช่น:

from sympy import symbols, diff, integrate, sin

x = symbols('x')

print(diff(sin(x), x))
print(integrate(sin(x), x))

ผลลัพธ์ที่ได้เป็นนิพจน์เชิงสัญลักษณ์ เช่น อนุพันธ์ของ sin(x) เป็น cos(x) และปริพันธ์ไม่จำกัดเขตของ sin(x) เป็น -cos(x)

การแก้สมการ

[แก้]

SymPy สามารถแก้สมการพีชคณิต ระบบสมการ สมการเชิงอนุพันธ์บางประเภท และปัญหาคณิตศาสตร์ที่เขียนในรูปสมการได้[13] ตัวอย่างเช่น:

from sympy import symbols, Eq, solve

x = symbols('x')
solution = solve(Eq(x**2 - 4, 0), x)

print(solution)

ผลลัพธ์คือรากของสมการ x**2 - 4 = 0 ในรูปสัญลักษณ์

เมทริกซ์และพีชคณิตเชิงเส้น

[แก้]

SymPy มีเครื่องมือสำหรับเมทริกซ์และพีชคณิตเชิงเส้น เช่น การบวกและคูณเมทริกซ์ ดีเทอร์มิแนนต์ อินเวอร์ส ค่าเฉพาะ เวกเตอร์เฉพาะ และการแก้ระบบสมการเชิงเส้น[14] ความสามารถนี้ต่างจากไลบรารีเชิงตัวเลขอย่าง NumPy ตรงที่ SymPy สามารถจัดการเมทริกซ์ที่มีตัวแปรสัญลักษณ์ได้

from sympy import Matrix, symbols

x = symbols('x')
M = Matrix([[1, x], [0, 1]])

print(M.det())
print(M.inv())

คณิตศาสตร์ไม่ต่อเนื่องและทฤษฎีจำนวน

[แก้]

SymPy รองรับงานบางส่วนของคณิตศาสตร์ไม่ต่อเนื่อง เช่น สัมประสิทธิ์ทวินาม ผลรวม ผลคูณ การจัดหมู่และเรียงสับเปลี่ยน ตรรกะเชิงสัญลักษณ์ และทฤษฎีจำนวน เช่น การทดสอบจำนวนเฉพาะ การแยกตัวประกอบจำนวนเต็ม และการสร้างจำนวนเฉพาะ[15][16]

ฟิสิกส์และหน่วยวัด

[แก้]

SymPy มีโมดูลด้านฟิสิกส์ เช่น กลศาสตร์คลาสสิก กลศาสตร์ควอนตัม เลนส์แบบเกาส์ หน่วยวัด และระบบควบคุมเชิงเส้น โมดูลเหล่านี้ช่วยให้เขียนสมการทางฟิสิกส์ในรูปสัญลักษณ์และจัดการนิพจน์ทางคณิตศาสตร์ที่ซับซ้อนได้[17]

การพิมพ์ผลลัพธ์และการสร้างโค้ด

[แก้]

SymPy สามารถแสดงผลนิพจน์เป็นข้อความธรรมดา Unicode, pretty printing, LaTeX, MathML และรูปแบบอื่น นอกจากนี้ยังสามารถสร้างโค้ดสำหรับภาษาเชิงตัวเลขบางภาษา เช่น C, Fortran และ Python หรือใช้ร่วมกับ NumPy เพื่อเปลี่ยนนิพจน์เชิงสัญลักษณ์เป็นฟังก์ชันเชิงตัวเลขได้[18][19][20]

การใช้งาน

[แก้]

SymPy ใช้ได้ทั้งในฐานะเครื่องมือโต้ตอบสำหรับนักเรียน นักวิจัย และวิศวกร และในฐานะไลบรารีภายในโปรแกรม Python[1][3] งานที่พบได้บ่อย ได้แก่ การเรียนและสอนพีชคณิต แคลคูลัส และพีชคณิตเชิงเส้น การตรวจสอบผลลัพธ์ทางคณิตศาสตร์เชิงสัญลักษณ์ การสร้างสมการเพื่อใช้ในงานจำลองหรือคำนวณเชิงตัวเลข การสร้างโค้ดจากนิพจน์ทางคณิตศาสตร์ และการทำงานร่วมกับ IPython หรือ Jupyter Notebook เพื่อทดลองและอธิบายขั้นตอนทางคณิตศาสตร์[3][20]

ความสัมพันธ์กับระบบนิเวศไพทอน

[แก้]

SymPy เป็นส่วนหนึ่งของระบบนิเวศ scientific Python แต่มีบทบาทต่างจากไลบรารีเชิงตัวเลข เช่น NumPy และ SciPy โดย SymPy เน้นการจัดการนิพจน์เชิงสัญลักษณ์ ส่วน NumPy และ SciPy เหมาะกับการประเมินเชิงตัวเลขและการทำงานกับอาร์เรย์ขนาดใหญ่ ผู้ใช้สามารถสร้างหรือจัดรูปสมการด้วย SymPy แล้วแปลงเป็นฟังก์ชันเชิงตัวเลขด้วย lambdify เพื่อใช้กับ NumPy หรือระบบเชิงตัวเลขอื่นได้[20][21]

SymPy ยังใช้ร่วมกับ IPython และ Jupyter ได้ เพราะสามารถแสดงผลนิพจน์ทางคณิตศาสตร์ในรูปที่อ่านง่าย รวมถึงแสดงผลเป็น LaTeX ภายในโน้ตบุ๊กได้[22] ความสามารถนี้ทำให้ SymPy เหมาะกับการสอน การทดลอง และการสื่อสารผลลัพธ์ทางคณิตศาสตร์

โครงการที่เกี่ยวข้อง

[แก้]

มีโครงการหลายโครงการที่เกี่ยวข้องกับ SymPy หรือใช้ SymPy เป็นส่วนประกอบ เช่น:

  • SageMath ระบบคณิตศาสตร์โอเพนซอร์สที่รวมไลบรารีคณิตศาสตร์หลายชนิด รวมถึง SymPy[23]
  • mpmath ไลบรารี Python สำหรับเลขทศนิยมความแม่นยำไม่จำกัด ซึ่งเป็น dependency สำคัญของ SymPy[24][1]
  • SymEngine ไลบรารีคำนวณเชิงสัญลักษณ์ที่เขียนด้วย C++ โดยได้รับแรงบันดาลใจจาก SymPy และมุ่งเน้นประสิทธิภาพสูงกว่าในแกนคำนวณบางส่วน[25]
  • Diofant โครงการ fork ของ SymPy ที่พัฒนาต่อยอดในแนวทางของตนเอง[26]

การติดตั้งและการพัฒนา

[แก้]

วิธีติดตั้ง SymPy ที่ใช้ทั่วไปคือผ่าน Python Package Index ด้วยคำสั่ง pip install sympy หรือผ่านระบบจัดการแพ็กเกจของ Anaconda/conda[27][7] เนื่องจาก SymPy เขียนด้วย Python เป็นหลักและมี dependency หลักคือ mpmath จึงติดตั้งและตรวจสอบซอร์สโค้ดได้ง่ายเมื่อเทียบกับระบบพีชคณิตคอมพิวเตอร์ที่ประกอบด้วยภาษาและระบบย่อยจำนวนมาก[1]

โครงการ SymPy พัฒนาบน GitHub และเปิดรับการมีส่วนร่วมจากชุมชน ทั้งการรายงานบั๊ก แก้เอกสาร เพิ่มตัวอย่าง ทดสอบ และพัฒนาโมดูลใหม่[28]

ข้อจำกัด

[แก้]

SymPy เน้นการคำนวณเชิงสัญลักษณ์และความสามารถในการจัดการนิพจน์ทางคณิตศาสตร์ มากกว่าการประมวลผลอาร์เรย์เชิงตัวเลขขนาดใหญ่ งานที่ต้องประเมินค่าจำนวนมากจึงมักเหมาะกับ NumPy, SciPy หรือการแปลงนิพจน์ SymPy เป็นฟังก์ชันเชิงตัวเลขผ่าน lambdify มากกว่า[20][21]

นอกจากนี้ ปัญหาพีชคณิตคอมพิวเตอร์บางประเภทมีความซับซ้อนสูงโดยธรรมชาติ และระบบเชิงสัญลักษณ์อาจไม่สามารถหาคำตอบแบบปิดรูปได้เสมอไป หรืออาจใช้เวลาคำนวณนานในกรณีที่นิพจน์ซับซ้อนมาก[3]

ดูเพิ่ม

[แก้]

อ้างอิง

[แก้]
  1. 1 2 3 4 5 6 "SymPy". SymPy. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  2. 1 2 3 4 "SymPy 1.14.0 documentation". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  3. 1 2 3 4 5 6 7 8 9 10 Meurer, Aaron; Smith, Christopher P.; Paprocki, Mateusz; และคณะ (2017). "SymPy: symbolic computing in Python". PeerJ Computer Science. 3: e103. doi:10.7717/peerj-cs.103.
  4. "SymPy Live". SymPy Live. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  5. "SymPy Gamma". SymPy Gamma. สืบค้นเมื่อ 8 July 2026.
  6. "Releases · sympy/sympy". GitHub. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  7. 1 2 "sympy". Python Package Index. Python Software Foundation. สืบค้นเมื่อ 8 July 2026.
  8. "SimPy". SimPy documentation. สืบค้นเมื่อ 8 July 2026.
  9. 1 2 Joyner, David; Čertík, Ondřej; Meurer, Aaron; Granger, Brian E. (2012). "Open source computer algebra systems: SymPy". ACM Communications in Computer Algebra. 45 (3/4): 225–234. doi:10.1145/2110170.2110185.
  10. Čertík, Ondřej. "SymPy". Ondřej Čertík. สืบค้นเมื่อ 8 July 2026.
  11. "Simplification". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  12. "Calculus". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  13. "Solvers". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  14. "Matrices". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  15. "Discrete". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  16. "Number Theory". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  17. "Physics". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  18. "Printing". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  19. "Codegen". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  20. 1 2 3 4 "Numeric Computation". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  21. 1 2 "Best Practices". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  22. "Printing". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  23. "Packages and Features of SageMath". SageMath. สืบค้นเมื่อ 8 July 2026.
  24. "mpmath". mpmath. สืบค้นเมื่อ 8 July 2026.
  25. "SymEngine". GitHub. SymEngine developers. สืบค้นเมื่อ 8 July 2026.
  26. "Diofant". Diofant documentation. สืบค้นเมื่อ 8 July 2026.
  27. "Installation". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
  28. "SymPy". GitHub. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.

อ่านเพิ่ม

[แก้]
  • Meurer, Aaron; Smith, Christopher P.; Paprocki, Mateusz; และคณะ (2017). "SymPy: symbolic computing in Python". PeerJ Computer Science. 3: e103. doi:10.7717/peerj-cs.103.
  • Joyner, David; Čertík, Ondřej; Meurer, Aaron; Granger, Brian E. (2012). "Open source computer algebra systems: SymPy". ACM Communications in Computer Algebra. 45 (3/4): 225–234. doi:10.1145/2110170.2110185.

แหล่งข้อมูลอื่น

[แก้]