SymPy
| นักพัฒนา | ทีมพัฒนา SymPy |
|---|---|
| วันที่เปิดตัว | 2007 |
| รุ่นเสถียร | 1.14.0
/ 27 เมษายน 2025 |
| ที่เก็บข้อมูล | |
| ภาษาที่เขียน | ภาษาไพทอน |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| ประเภท | ระบบพีชคณิตคอมพิวเตอร์, ไลบรารีคณิตศาสตร์ |
| สัญญาอนุญาต | BSD 3-Clause |
| เว็บไซต์ | www |
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 2 3 4 5 6 "SymPy". SymPy. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- 1 2 3 4 "SymPy 1.14.0 documentation". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- 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.
- ↑ "SymPy Live". SymPy Live. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "SymPy Gamma". SymPy Gamma. สืบค้นเมื่อ 8 July 2026.
- ↑ "Releases · sympy/sympy". GitHub. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- 1 2 "sympy". Python Package Index. Python Software Foundation. สืบค้นเมื่อ 8 July 2026.
- ↑ "SimPy". SimPy documentation. สืบค้นเมื่อ 8 July 2026.
- 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.
- ↑ Čertík, Ondřej. "SymPy". Ondřej Čertík. สืบค้นเมื่อ 8 July 2026.
- ↑ "Simplification". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Calculus". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Solvers". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Matrices". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Discrete". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Number Theory". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Physics". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Printing". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Codegen". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- 1 2 3 4 "Numeric Computation". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- 1 2 "Best Practices". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Printing". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "Packages and Features of SageMath". SageMath. สืบค้นเมื่อ 8 July 2026.
- ↑ "mpmath". mpmath. สืบค้นเมื่อ 8 July 2026.
- ↑ "SymEngine". GitHub. SymEngine developers. สืบค้นเมื่อ 8 July 2026.
- ↑ "Diofant". Diofant documentation. สืบค้นเมื่อ 8 July 2026.
- ↑ "Installation". SymPy documentation. SymPy Development Team. สืบค้นเมื่อ 8 July 2026.
- ↑ "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.
แหล่งข้อมูลอื่น
[แก้]- เว็บไซต์ทางการ
- เอกสาร SymPy
- SymPy ที่ Python Package Index
- ซอร์สโค้ด SymPy ที่ GitHub
- SymPy Live
- SymPy Gamma