SymPy - การทำให้เข้าใจง่าย

Sympy มีความสามารถที่มีประสิทธิภาพในการลดความซับซ้อนของนิพจน์ทางคณิตศาสตร์ มีฟังก์ชั่นมากมายใน SymPy เพื่อทำให้ง่ายขึ้นหลายประเภท ฟังก์ชันทั่วไปที่เรียกว่า simplify () คือความพยายามที่จะมาถึงรูปแบบที่ง่ายที่สุดของนิพจน์

ทำให้ง่ายขึ้น

ฟังก์ชันนี้กำหนดไว้ในโมดูล sympy.simplify simplify () พยายามใช้การวิเคราะห์พฤติกรรมอัจฉริยะเพื่อทำให้นิพจน์อินพุต“ ง่ายขึ้น” โค้ดต่อไปนี้แสดงให้เห็นว่านิพจน์ง่ายขึ้น $ sin ^ 2 (x) + cos ^ 2 (x) $

>>> from sympy import * 
>>> x=Symbol('x')
>>> expr=sin(x)**2 + cos(x)**2 
>>> simplify(expr)

ข้อมูลโค้ดด้านบนให้ผลลัพธ์ต่อไปนี้ -

1

ขยาย

expand () เป็นหนึ่งในฟังก์ชันการทำให้เข้าใจง่ายที่พบบ่อยที่สุดใน SymPy ซึ่งใช้ในการขยายนิพจน์พหุนาม ตัวอย่างเช่น -

>>> a,b=symbols('a b') 
>>> expand((a+b)**2)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$a^2 + 2ab + b^2$

>>> expand((a+b)*(a-b))

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$a^2 - b^2$

ฟังก์ชัน expand () ทำให้นิพจน์ใหญ่ขึ้นไม่เล็กลง โดยปกติจะเป็นกรณีนี้ แต่บ่อยครั้งที่นิพจน์จะเล็กลงเมื่อเรียก expand () บนมัน

>>> expand((x + 1)*(x - 2) - (x - 1)*x)

ข้อมูลโค้ดด้านบนให้ผลลัพธ์ต่อไปนี้ -

-2

ปัจจัย

ฟังก์ชันนี้รับพหุนามและแยกตัวประกอบเป็นตัวประกอบที่ไม่สามารถวัดได้เหนือจำนวนตรรกยะ

>>> x,y,z=symbols('x y z') 
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
>>> factor(expr)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$z(x + 2y)^2$

>>> factor(x**2+2*x+1)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$(x + 1)^2$

ฟังก์ชัน factor () ตรงข้ามกับ expand () แต่ละปัจจัยที่ส่งคืนโดย factor () รับประกันว่าไม่สามารถลดทอนได้ ฟังก์ชัน factor_list () ส่งกลับผลลัพธ์ที่มีโครงสร้างมากขึ้น

>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
>>> factor_list(expr)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

(1, [(z, 1), (x + 2*y, 2)])

เก็บ

ฟังก์ชันนี้จะรวบรวมเงื่อนไขเพิ่มเติมของนิพจน์ที่เกี่ยวกับรายการนิพจน์ที่ขึ้นอยู่กับพาวเวอร์ที่มีเลขชี้กำลังเป็นเหตุเป็นผล

>>> expr=x*y + x - 3 + 2*x**2 - z*x**2 + x**3 
>>> expr

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$x^3 + x^2z + 2x^2 + xy + x - 3$

ฟังก์ชัน collect () ในนิพจน์นี้ให้ผลลัพธ์ดังนี้ -

>>> collect(expr,x)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$x^3 + x^2(2 - z) + x(y + 1) - 3$

>>> expr=y**2*x + 4*x*y*z + 4*y**2*z+y**3+2*x*y 
>>> collect(expr,y)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$Y^3+Y^2(x+4z)+y(4xz+2x)$

ยกเลิก

ฟังก์ชันยกเลิก () จะใช้ฟังก์ชันที่มีเหตุผลใด ๆ และใส่ลงในรูปแบบบัญญัติมาตรฐาน p / q โดยที่ p และ q เป็นพหุนามที่ขยายโดยไม่มีปัจจัยร่วม สัมประสิทธิ์ชั้นนำของ p และ q ไม่มีตัวส่วนคือเป็นจำนวนเต็ม

>>> expr1=x**2+2*x+1 
>>> expr2=x+1 
>>> cancel(expr1/expr2)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$x+1$

>>> expr = 1/x + (3*x/2 - 2)/(x - 4) 
>>> expr

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$\frac{\frac{3x}{2} - 2}{x - 4} + \frac{1}{x}$

>>> cancel(expr)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$\frac{3x^2 - 2x - 8}{2x^2 - 8}$

>>> expr=1/sin(x)**2 
>>> expr1=sin(x) 
>>> cancel(expr1*expr)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$\frac{1}{\sin(x)}$

Trigsimp

ฟังก์ชันนี้ใช้เพื่อลดความซับซ้อนของอัตลักษณ์ตรีโกณมิติ อาจสังเกตได้ว่ารูปแบบการตั้งชื่อสำหรับฟังก์ชันตรีโกณมิติผกผันคือการต่อท้าย a หน้าชื่อฟังก์ชัน ตัวอย่างเช่นโคไซน์ผกผันหรือโคไซน์อาร์กเรียกว่า acos ()

>>> from sympy import trigsimp, sin, cos 
>>> from sympy.abc import x, y
>>> expr = 2*sin(x)**2 + 2*cos(x)**2 
>>> trigsimp(expr)

2

ฟังก์ชัน trigsimp ใช้ฮิวริสติกส์เพื่อใช้เอกลักษณ์ตรีโกณมิติที่เหมาะสมที่สุด

powersimp

ฟังก์ชันนี้จะลดการแสดงออกที่กำหนดโดยการรวมอำนาจที่มีฐานและเลขชี้กำลังที่คล้ายกัน

>>> expr=x**y*x**z*y**z 
>>> expr

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$x^y x^z y^z$

>>> powsimp(expr)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$x^{y+z} y^z$

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

>>> powsimp(expr, combine='base', force=True)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$x^y(xy)^z$

หวี

นิพจน์ Combinatorial ที่เกี่ยวข้องกับแฟกทอเรียลและทวินามสามารถทำให้ง่ายขึ้นได้โดยใช้ฟังก์ชัน combsimp () SymPy มีฟังก์ชันแฟกทอเรียล ()

>>> expr=factorial(x)/factorial(x - 3) 
>>> expr

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$\frac{x!}{(x - 3)!}$

เพื่อลดความซับซ้อนของนิพจน์ Combinatorial ด้านบนเราใช้ฟังก์ชัน combsimp () ดังนี้ -

>>> combsimp(expr)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$x(x-2)(x-1)$

ทวินาม (x, y) คือจำนวนวิธีในการเลือกรายการ y จากชุดของรายการที่แตกต่างกัน x นอกจากนี้ยังมักเขียนเป็น xCy

>>> binomial(x,y)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$(\frac{x}{y})$

>>> combsimp(binomial(x+1, y+1)/binomial(x, y))

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$\frac{x + 1}{y + 1}$

logcombine

ฟังก์ชันนี้ใช้ลอการิทึมและรวมเข้าด้วยกันโดยใช้กฎต่อไปนี้ -

  • log (x) + log (y) == log (x * y) ถ้าทั้งสองเป็นบวก
  • a * log (x) == log (x ** a) ถ้า x เป็นบวกและ a เป็นจริง
>>> logcombine(a*log(x) + log(y) - log(z))

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$a\log(x) + \log(y) - \log(z)$

หากพารามิเตอร์แรงของฟังก์ชันนี้ถูกตั้งค่าเป็น True สมมติฐานข้างต้นจะถือว่ามีไว้หากไม่มีสมมติฐานเกี่ยวกับปริมาณอยู่แล้ว

>>> logcombine(a*log(x) + log(y) - log(z), force=True)

ข้อมูลโค้ดด้านบนให้เอาต์พุตเทียบเท่ากับนิพจน์ด้านล่าง -

$\log\frac{x^a y}{z}$