SymPy - Basitleştirme

Sympy, matematiksel ifadeleri basitleştirme konusunda güçlü bir yeteneğe sahiptir. SymPy'de çeşitli basitleştirme türlerini gerçekleştirmek için birçok işlev vardır. Bir ifadenin en basit biçimine ulaşmaya çalışan simplify () adlı genel bir işlev vardır.

basitleştirmek

Bu fonksiyon sympy.simplify modülünde tanımlanmıştır. simplify (), girdi ifadesini "daha basit" hale getirmek için akıllı buluşsal yöntemler uygulamaya çalışır. Aşağıdaki kod, ifadeyi basitleştirdiğini gösterir$sin^2(x)+cos^2(x)$.

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

Yukarıdaki kod parçacığı aşağıdaki çıktıyı verir -

1

genişletmek

Genişletme (), polinom ifadelerini genişletmede kullanılan SymPy'deki en yaygın basitleştirme işlevlerinden biridir. Örneğin -

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

$a^2 - b^2$

Expand () işlevi, ifadeleri küçültmez, büyütür. Genellikle durum böyledir, ancak üzerinde expand () çağırıldığında bir ifade daha küçük hale gelecektir.

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

Yukarıdaki kod parçacığı aşağıdaki çıktıyı verir -

-2

faktör

Bu fonksiyon bir polinomu alır ve onu rasyonel sayılar üzerinde indirgenemez faktörlere dönüştürür.

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

$z(x + 2y)^2$

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

$(x + 1)^2$

Factor () işlevi, expand () işlevinin tersidir. Faktör () tarafından döndürülen faktörlerin her birinin indirgenemez olduğu garanti edilir. Factor_list () işlevi daha yapılandırılmış bir çıktı döndürür.

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

toplamak

Bu işlev, rasyonel üslü güçlere kadar bir ifade listesine göre bir ifadenin ek terimlerini toplar.

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

Bu ifadedeki Collect () işlevi aşağıdaki gibi sonuçlanır -

>>> collect(expr,x)

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

$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)

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

iptal etmek

Cancel () işlevi herhangi bir rasyonel işlevi alır ve onu standart kanonik biçime, p / q'ya koyar; burada p ve q, ortak faktör içermeyen genişletilmiş polinomlardır. P ve q'nun öncü katsayılarının paydaları yoktur, yani tam sayılardır.

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

$x+1$

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

>>> cancel(expr)

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

Trigsimp

Bu işlev, trigonometrik kimlikleri basitleştirmek için kullanılır. Ters trigonometrik fonksiyonlar için isimlendirme kurallarının, fonksiyonun adının önüne bir a eklemek olduğu not edilebilir. Örneğin, ters kosinüs veya ark kosinüsü acos () olarak adlandırılır.

>>> 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 işlevi, en uygun trigonometrik kimliği uygulamak için buluşsal yöntemler kullanır.

Powersimp

Bu fonksiyon, benzer taban ve üslerle güçleri birleştirerek verilen ifadeyi azaltır.

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

$x^y x^z y^z$

>>> powsimp(expr)

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

Powsimp () 'i yalnızca bazları birleştirebilir veya sadece =' taban 'veya birleştir =' exp 'değiştirerek üsleri birleştirebilirsiniz. Varsayılan olarak, her ikisini de yapan = 'all' kombinasyonunu birleştirin. Force True ise, bazlar varsayımlar kontrol edilmeden birleştirilecektir.

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

$x^y(xy)^z$

Combsimp

Faktöriyel bir binom içeren kombinatoryal ifadeler, combsimp () işlevi kullanılarak basitleştirilebilir. SymPy bir faktoriyel () işlevi sağlar

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

Yukarıdaki kombinatoryal ifadeyi basitleştirmek için combsimp () işlevini aşağıdaki gibi kullanıyoruz -

>>> combsimp(expr)

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

Binom (x, y), bir dizi x farklı öğeden y öğeyi seçmenin yollarının sayısıdır. Genellikle xCy olarak da yazılır.

>>> binomial(x,y)

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

logcombine

Bu işlev, logaritmaları alır ve aşağıdaki kuralları kullanarak bunları birleştirir -

  • log (x) + log (y) == log (x * y) eğer ikisi de pozitifse
  • a * log (x) == log (x ** a) eğer x pozitif ve a gerçekse
>>> logcombine(a*log(x) + log(y) - log(z))

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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

Bu fonksiyonun kuvvet parametresi True olarak ayarlanmışsa, bir miktar üzerinde halihazırda herhangi bir varsayım yoksa, yukarıdaki varsayımların geçerli olduğu varsayılacaktır.

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

Yukarıdaki kod parçacığı, aşağıdaki ifadeye eşdeğer bir çıktı verir -

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