มีซอฟต์แวร์โอเพ่นซอร์สหรือซอฟต์แวร์ที่เข้าถึงได้ง่ายซึ่งสามารถลดความซับซ้อนของนิพจน์พีชคณิตเช่น


17

ฉันคำนวณสิ่งต่าง ๆ ด้วยมือเสมอ แต่ตอนนี้สหายของฉันเริ่มน่ารังเกียจและทำแบบฝึกหัดซ้ำ ๆ มากมายที่เกี่ยวข้องเพียงแค่เสียบสิ่งต่าง ๆ ในลักษณะที่แสดงออกมาด้านบน ฉันสนใจซอฟต์แวร์โอเพนซอร์ซเช่น Python หรือ R เพื่อทำให้สมการเหล่านี้ง่ายขึ้น ฉันพยายามใช้ Wolfram Alphaแต่ฉันไม่ประสบความสำเร็จ ชุดซอฟต์แวร์โอเพนซอร์ซใดที่สามารถทดแทนนิพจน์ในสมการx 2 +2x+3และทำให้ผลลัพธ์ง่ายขึ้นหรือไม่ โดยเฉพาะฉันกำลังมองหาแพคเกจซอฟต์แวร์ที่มีคำสั่งบางอย่างx=2เสื้อ-1x2+2x+3simplify

คำตอบ:


28

คุณอาจต้องการที่จะมองเข้าไปSymPyซึ่งเป็นห้องสมุดหลามกับที่คุณต้องการคำสั่งลดความซับซ้อน

>>> from sympy.abc import t
>>> import sympy
>>> x = t*2**(1/2) - 1
>>> x**2 + 2*x + 3
2*t + (t - 1)**2 + 1
>>> sympy.simplify(x**2 + 2*x + 3)
t**2 + 2

2
ฉันจะแนะนำSageแต่ดูเหมือนว่ายังไม่มีความสามารถเชิงสัญลักษณ์ถึงแม้ว่าใคร ๆ ก็คิดว่าในที่สุดมันก็จะรวมความสามารถเชิงสัญลักษณ์เพราะมันมีจุดมุ่งหมายที่จะเป็นทางเลือกโอเพนซอร์ซกับ Maple และ Mathematica
Geoff Oxberry

1
Sage มีความสามารถเชิงสัญลักษณ์ (ฉันเคยใช้มันเพื่อทำอินทิกรัลเชิงสัญลักษณ์) แต่มันก็ไม่ชัดเจนโดยเฉพาะอย่างยิ่งที่จะทำเช่นนั้นเว้นแต่คุณจะมองหามัน var('a')หากคุณต้องการที่จะใช้เป็นสัญลักษณ์ที่คุณต้องประกาศก่อนในขณะที่ อย่างน้อยก็เป็นจริงเมื่อฉันใช้ปัญญาชนครั้งล่าสุดเมื่อ 3 หรือ 4 ปีก่อน โดยทั่วไปแล้ว mathematica จะถือว่าคุณต้องการผลลัพธ์ที่เป็นสัญลักษณ์และ sage จะถือว่าคุณต้องการผลลัพธ์ที่เป็นตัวเลข
Dan

1
@hhh: ถ้าฉันเข้าใจผิดชิ้นส่วนโค้ดของคุณไม่ตรงกับนิพจน์ที่คุณต้องการประเมินและทำให้ง่ายขึ้น
Geoff Oxberry

@GeoffOxberry: ฉันพยายามที่จะแก้ไขปัญหานั้นรวมถึงหนึ่งใน LaTeX ในคำถามเดิม
Jack Poulson

1
ความเข้าใจของฉันคือปราชญ์จริงรวมส่วนใหญ่ของ codebase SymPy
MRocklin

9

ผู้รอบรู้สามารถทำได้ (คุณจะต้องเลื่อนหน้าลงไปเรื่อย ๆ เพื่อไปยังส่วนที่ทำให้เข้าใจได้ง่าย)

นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณอ่านบทแนะนำทั่วไปเกี่ยวกับคณิตศาสตร์เชิงสัญลักษณ์ใน Sage ความหมายและไวยากรณ์ของมันค่อนข้างแตกต่างจากMathematicaซึ่งเป็นสิ่งที่คนส่วนใหญ่คุ้นเคย

นี่คือตัวอย่างจากเอกสารที่ฉันเชื่อมโยงคุณกับ:

sage: var('x,y,z,a,b,c,d,e,f')
(x, y, z, a, b, c, d, e, f)
sage: t = a^2 + b^2 + (x+y)^3
# substitute with keyword arguments (works only with symbols)
sage: t.subs(a=c)
(x + y)^3 + b^2 + c^2

สำหรับกรณีของคุณสิ่งนี้ควรใช้งานได้:

var(f,x,t)
f=x^2+2*x+3
f.subs(x=(sqrt(2)*t-1))
f.simplify()

เครื่องมือค้นหาเอกสารของพวกเขาต้องการการปรับปรุงแล้ว ฉันพิมพ์ใน "ลดความซับซ้อน" และไม่ได้รับหน้านั้นที่ทุกคน ยินดีที่ได้พบ!
Geoff Oxberry

ฉันเพิ่งพิมพ์ "ปราชญ์ลดความซับซ้อน" ลงใน google
Dan

8

คุณได้คำตอบที่ดีอยู่แล้วด้วยแพ็คเกจโอเพ่นซอร์สคุณภาพสูง

ฉันต้องการจะชี้ไปที่http://www.mathics.net/ (http://mathics.org/ หากคุณต้องการดาวน์โหลด) ซึ่งเป็น CAS โอเพ่นซอร์สที่ใช้ไวยากรณ์ Mathematica (ซึ่งคุณอาจคุ้นเคย ถ้าคุณใช้ WolramAlpha) มันยังไม่สมบูรณ์เกือบเท่ากับคำแนะนำอื่น ๆ ที่คุณได้รับ แต่มันสามารถทำการดำเนินการ (ง่ายมาก) ที่คุณพูดถึงในคำถามของคุณ

สิ่งที่คุณกำลังพูดถึงในคำถามของคุณไม่ใช่การทำให้เข้าใจง่าย แต่เป็นการทดแทนและการขยายตัว (ซึ่งไม่เหมือนการทำให้ซับซ้อนที่ซับซ้อนยิ่งขึ้นนั้นง่ายมากที่จะใช้งานการดำเนินการที่มีอยู่แม้ใน CAS พื้นฐานที่สุด):

ในวิชาคณิตศาสตร์มันจะมีลักษณะเช่นนี้:

eq = x^2 + 2x + 3

eq /. x -> Sqrt[2] t - 1

Expand[%]

ในกรณีที่คุณต้องการฟังก์ชันการทำให้เข้าใจง่ายจะมีการเรียกใช้Simplify[]และจะทำงานแทนExpand[]ตัวอย่างด้านบน


8

ในฐานะที่เป็นakidแนะนำwxMaximaเป็นปลายด้านหน้าดีกราฟิกเพื่อเคารพเสียงกระเพื่อมตามระบบคอมพิวเตอร์พีชคณิตเรียกว่าแม็กซิม่า

เมื่อใช้ตัวอย่างคุณจะได้รับสิ่งต่อไปนี้:

eq1: x=t*2**(1/2)-1;
x=2เสื้อ-1
eq2: x**2+2*x+3;
x2+2x+3
eq3: subst(eq1, eq2);
(2เสื้อ-1)2+2(2เสื้อ-1)+3
ratsimp(eq3);
2เสื้อ2+2

หรือคุณสามารถทำได้โดยตรง:

(% i5) ratsimp(subst(x=t*2**(1/2)-1, x**2+2*x+3));
(% o5)2เสื้อ2+2

Maxima มีหลายวิธีในการลดความซับซ้อน แต่ratsimpเป็นก้าวแรกที่ดี


5

wxMaximaสามารถลดความซับซ้อนของการแสดงออก ผมเชื่อว่ามันควรจะเป็นแทนสำหรับเมเปิ้ล




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.