1 คะแนน โดย GN⁺ 2024-03-01 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ข้อดีของ SymPy

  • ฟรี: SymPy ใช้สัญญาอนุญาตแบบ BSD จึงใช้งานได้อย่างอิสระและไม่มีค่าใช้จ่าย
  • พัฒนาบน Python: SymPy เขียนขึ้นด้วย Python ทั้งหมด และใช้งานผ่าน Python
  • น้ำหนักเบา: SymPy พึ่งพาเพียง mpmath ซึ่งเป็นไลบรารี Python ล้วนสำหรับการคำนวณเลขทศนิยมความแม่นยำตามต้องการ จึงใช้งานได้ง่าย
  • เป็นไลบรารี: นอกจากใช้เป็นเครื่องมือแบบโต้ตอบได้แล้ว ยังสามารถฝังในแอปพลิเคชันอื่นหรือขยายด้วยฟังก์ชันที่ผู้ใช้กำหนดเองได้

โครงการที่ใช้ SymPy

  • Cadabra: ระบบพีชคณิตเทนเซอร์และทฤษฎีสนาม (ควอนตัม) ที่ใช้ SymPy สำหรับการคำนวณพีชคณิตเชิงสเกลาร์
  • ChemPy: แพ็กเกจที่เป็นประโยชน์ด้านเคมีซึ่งเขียนด้วย Python
  • devito: DSL เชิงสัญลักษณ์และคอมไพเลอร์แบบ just-in-time สำหรับการคำนวณ stencil ประสิทธิภาพสูง
  • EinsteinPy: แพ็กเกจ Python สำหรับทฤษฎีสัมพัทธภาพทั่วไปเชิงสัญลักษณ์และเชิงตัวเลข
  • galgebra: พีชคณิตเรขาคณิต (เดิมคือ sympy.galgebra)
  • LaTeX Expression project: ทำให้การจัดพิมพ์นิพจน์พีชคณิตด้วย LaTeX ทำได้ง่าย พร้อมรองรับการแทนค่าอัตโนมัติและการคำนวณผลลัพธ์
  • Lcapy: แพ็กเกจ Python เชิงทดลองเพื่อการสอนการวิเคราะห์วงจรเชิงเส้น
  • OctSymPy: แพ็กเกจเชิงสัญลักษณ์สำหรับ Octave ที่ใช้ SymPy
  • Optlang: แพ็กเกจ Python สำหรับแก้ปัญหาการเพิ่มประสิทธิภาพเชิงคณิตศาสตร์
  • PyDy: พลวัตหลายวัตถุใน Python
  • pyneqsys: นิยามเชิงสัญลักษณ์เพื่อแก้ระบบสมการไม่เชิงเส้นเชิงตัวเลข
  • pyodesys: การอินทิเกรตเชิงตัวเลขอย่างง่ายของระบบ ODE ใน Python
  • PyTorch TorchInductor: TorchInductor ใช้ SymPy เพื่อรองรับ shape และ stride แบบไดนามิก
  • QMCPACK: Quantum Monte Carlo ใน C++ โดยใช้ SymPy เพื่อสร้างค่าอ้างอิงสำหรับการทดสอบหน่วยและการสร้างโค้ดบางส่วน
  • Quantum Programming in Python: ออสซิลเลเตอร์ฮาร์มอนิกอย่างง่ายควอนตัมแบบ 1D และ quantum mapping gate
  • SageMath: ระบบคณิตศาสตร์โอเพนซอร์สที่รวม SymPy ไว้
  • Scikit-fdiff: การดิสครีไทซ์แบบ finite difference
  • SfePy: finite element แบบเรียบง่ายใน Python
  • Spyder: สภาพแวดล้อมพัฒนา Python เชิงวิทยาศาสตร์ที่เทียบได้กับ Rstudio หรือ MATLAB; รองรับ SymPy เต็มรูปแบบในคอนโซล IPython ของ Spyder
  • Symbolic statistical modeling: เพิ่มการดำเนินการทางสถิติให้กับแบบจำลองทางฟิสิกส์ที่ซับซ้อน
  • yt: แพ็กเกจ Python สำหรับวิเคราะห์และแสดงผลข้อมูลเชิงปริมาตร (unyt ซึ่งเป็นระบบหน่วยของ yt ใช้ SymPy)

ความเห็นของ GN⁺

  • SymPy เป็นไลบรารีสำหรับการคำนวณทางคณิตศาสตร์ที่คุ้นเคยสำหรับผู้ใช้ Python โดยให้ใช้งานฟรีภายใต้สัญญาอนุญาต BSD และพัฒนาบน Python จึงถูกใช้อย่างแพร่หลายในชุมชนโอเพนซอร์ส และมีจุดเด่นที่นำไปใช้ได้ในหลายสาขาวิทยาศาสตร์และวิศวกรรม
  • SymPy มีขนาดเบาและผสานรวมกับแอปพลิเคชันอื่นได้ง่าย จึงมอบความยืดหยุ่นให้ผู้ใช้ในการแก้ปัญหาคณิตศาสตร์ที่ซับซ้อนหรือขยายความสามารถด้วยฟังก์ชันที่สร้างขึ้นเอง
  • เมื่อนำเทคโนโลยีนี้มาใช้ จำเป็นต้องมีความเข้าใจพื้นฐานเกี่ยวกับ Python โดยเฉพาะในโครงการที่ให้ความสำคัญกับการสร้างแบบจำลองทางคณิตศาสตร์หรือการคำนวณเชิงสัญลักษณ์ ซึ่งจะเห็นคุณค่าของมันได้ชัดเจน
  • ประโยชน์ที่ได้รับจากการใช้ SymPy ได้แก่ การคำนวณทางคณิตศาสตร์ประสิทธิภาพสูง ความสามารถในการขยายไปสู่หลากหลายสาขา และการพัฒนาอย่างต่อเนื่องจากการสนับสนุนของชุมชนโอเพนซอร์ส
  • โครงการอื่นที่มีความสามารถใกล้เคียงกัน ได้แก่ Mathematica, Maple และ Symbolic Math Toolbox ของ MATLAB แต่ทั้งหมดเป็นซอฟต์แวร์เชิงพาณิชย์ ดังนั้น SymPy จึงเป็นทางเลือกที่ทรงพลังและใช้งานได้ฟรี

1 ความคิดเห็น

 
GN⁺ 2024-03-01
ความคิดเห็นบน Hacker News
  • ทำงานในสายหุ่นยนต์ และบ่อยครั้งต้องเขียนเวกเตอร์ขนาดใหญ่ที่คำนวณได้จากผลของการแปลงแบบ 3D รวมถึงคำนวณจาโคเบียนของมัน (อนุพันธ์) สำหรับตัวแปรสถานะหลายตัว ซึ่งนำไปสู่สมการที่ซับซ้อน สามารถใช้ sympy เพื่อคำนวณเวกเตอร์ขนาดใหญ่เหล่านี้แบบประกาศเจตนา คำนวณจาโคเบียน และส่งออกผลลัพธ์เป็นโค้ด C เพื่อนำเข้าไปใช้ในเคสของโค้ดได้ทันที ตัวอย่างเช่น หากเข้าถึงชุดข้อมูลที่มีตำแหน่งของหุ่นยนต์และตำแหน่งของเซนเซอร์ ก็มีตัวอย่างเล่น ๆ ที่แสดงวิธีแสดงเชิงประกาศถึงวิธีประมาณตำแหน่งของเซนเซอร์เมื่อเทียบกับจุดศูนย์กลางของหุ่นยนต์ โดยแค่กำหนดฟังก์ชัน transform และ invert เท่านั้น
  • SymPy เป็นเครื่องมือที่ยอดเยี่ยมมาก และใช้เป็นเครื่องมือการศึกษามาหลายปีแล้ว เมื่อเทียบกับ Mathematica/Maple เป็นต้น คิดว่าเป็นตัวเลือกที่ดีที่สุดเพราะมีฟังก์ชัน API ที่ตรงกับคำกริยาที่นักศึกษาใช้เมื่อเรียนคณิตศาสตร์อย่างพอดี (solve, expand, factor เป็นต้น) มีบทแนะนำสั้น ๆ สำหรับคนที่อยากเริ่มต้น และยังมีให้ในรูปแบบโน้ตบุ๊กที่รันได้ด้วย นอกจากนี้ สำหรับคนที่อยากลอง SymPy โดยไม่ต้องติดตั้งอะไรเลย ก็ยังมี SymPy live shell ที่รัน Python + SymPy ในเว็บเบราว์เซอร์ได้
  • คณิตศาสตร์เชิงสัญลักษณ์ไม่ได้ถูกศึกษาอย่างจริงจังในระดับปริญญาตรี และสิ่งที่ได้เจอส่วนใหญ่ก็ผูกอยู่กับซอฟต์แวร์ปิดอย่าง Mathematica และ MATLAB ผู้เขียนทำงานในสาขาคณิตศาสตร์/วิศวกรรมที่ใช้การคำนวณเทนเซอร์อย่างมาก และเคยใช้ Maxima เป็นเครื่องมือหลัก แต่แพ็กเกจด้านนี้มีจำกัดและใช้งานไม่ค่อยสะดวก ตอนนี้ใช้ SymPy สำหรับการคำนวณที่ซับซ้อนกว่า เนื่องจากได้ประโยชน์จากนามธรรมต่าง ๆ ที่ Python มีอยู่แล้ว สักวันหนึ่งอยากอ่าน 'Principles' ของ Norvig แล้วปรับแต่ง Maxima ให้เหมาะกับความต้องการของตนเอง (ถ้าใครมีเอกสารอ้างอิงที่ดีกว่าสำหรับอ่านซอร์สโค้ด/การติดตั้งใช้งานของ Maxima ในด้านการคำนวณเทนเซอร์/พีชคณิตเชิงสัญลักษณ์ [เทนเซอร์, เรขาคณิต] ก็อยากทราบ)
  • มีเบนช์มาร์กระหว่าง SymPy กับ Mathematica โดยผลคือ Mathematica แก้ปัญหาไม่ได้ 1,523 ข้อ ส่วน SymPy แก้ไม่ได้ 48,529 ข้อ ดังนั้น SymPy ยังมีช่องว่างที่ต้องตามให้ทัน
  • ใช้ SymPy เป็นเครื่องคิดเลข และมีลิงก์ GitHub สำหรับเรื่องนี้
  • เมื่อ 10 ปีก่อน ตอนที่สนใจทฤษฎีสัมพัทธภาพทั่วไป อยากเขียนโปรแกรมง่าย ๆ สำหรับจัดการการคำนวณเชิงสัญลักษณ์ของสมการสนามไอน์สไตน์ SymPy เป็นหนึ่งในตัวเลือก แต่ใช้งานยากและทำให้ทำงานได้ไม่สำเร็จ สุดท้ายใช้ Mathematica แล้วแก้ปัญหาได้ภายในไม่กี่ชั่วโมง ต่อมาจึงขยายต่อและใช้คำนวณจำนวนมากในงานวิจัยเกี่ยวกับหลุมดำ ปัจจุบัน SymPy ได้รับการพัฒนาไปมากและมีไลบรารีดี ๆ ถูกสร้างขึ้นแล้ว แถมยังมีตัวอย่าง Jupyter notebook สำหรับเมตริก Schwarzschild ด้วย
  • SymPy ทำงานได้ดีมากใน Jupyter มีลิงก์เดโมโน้ตบุ๊กสำหรับ SymPy ให้มาด้วย
  • มีลิงก์ Wikipedia ของ SymPy พร้อมลิงก์อภิปรายเกี่ยวกับวิธีสอนลอการิทึมด้วย Python และ SymPy นอกจากนี้ยังมีลิงก์เปรียบเทียบ SymPy กับ Matlab และลิงก์เอกสารแนะนำ NumPy สำหรับผู้ใช้ Matlab
  • SymPy เพียงพอสำหรับการทำงาน โดยทั่วไปมักใช้ผ่านชุดไลบรารีของ SageMath และมีคำถามว่า SymPy พัฒนาไปถึงจุดที่ใช้งานเดี่ยว ๆ ได้มากพอแล้วหรือยัง
  • สำหรับ "นักฟิสิกส์" สายเชิงตัวเลข SymPy เปรียบเหมือนของขวัญจากพระเจ้า เหมาะมากสำหรับสร้างต้นแบบโมเดลที่ซับซ้อนกว่าก่อนจะไปปรับให้เหมาะที่สุดด้วย C++ ภายหลัง ไม่ได้ใช้ Mathematica มากนัก แต่ให้ความรู้สึกว่ามันทรงพลังกว่าในเชิงสัญลักษณ์หรือเรื่องมากน้อยกว่า SymPy หวังว่าคนที่มีประสบการณ์กับ Mathematica มากกว่าจะช่วยอธิบายเรื่องนี้ได้ชัดเจนขึ้น