SymPy - Simplification
Sympy a une puissante capacité à simplifier les expressions mathématiques. Il existe de nombreuses fonctions dans SymPy pour effectuer différents types de simplification. Une fonction générale appelée simplify () est là qui tente d'arriver à la forme la plus simple d'une expression.
simplifier
Cette fonction est définie dans le module sympy.simplify. simplify () essaie d'appliquer une heuristique intelligente pour rendre l'expression d'entrée «plus simple». Le code suivant montre simplifie l'expression $ sin ^ 2 (x) + cos ^ 2 (x) $.
>>> from sympy import *
>>> x=Symbol('x')
>>> expr=sin(x)**2 + cos(x)**2
>>> simplify(expr)
L'extrait de code ci-dessus donne la sortie suivante -
1
développer
Expand () est l'une des fonctions de simplification les plus courantes de SymPy, utilisée pour développer des expressions polynomiales. Par exemple -
>>> a,b=symbols('a b')
>>> expand((a+b)**2)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$a^2 + 2ab + b^2$
>>> expand((a+b)*(a-b))
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$a^2 - b^2$
La fonction expand () rend les expressions plus grandes, pas plus petites. C'est généralement le cas, mais souvent une expression devient plus petite en appelant expand () dessus.
>>> expand((x + 1)*(x - 2) - (x - 1)*x)
L'extrait de code ci-dessus donne la sortie suivante -
-2
facteur
Cette fonction prend un polynôme et le factorise en facteurs irréductibles sur les nombres rationnels.
>>> x,y,z=symbols('x y z')
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z)
>>> factor(expr)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$z(x + 2y)^2$
>>> factor(x**2+2*x+1)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$(x + 1)^2$
La fonction factor () est l'opposé de expand (). Chacun des facteurs renvoyés par factor () est garanti irréductible. La fonction factor_list () renvoie une sortie plus structurée.
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z)
>>> factor_list(expr)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
(1, [(z, 1), (x + 2*y, 2)])
collecte
Cette fonction recueille des termes supplémentaires d'une expression par rapport à une liste d'expressions jusqu'à des puissances avec des exposants rationnels.
>>> expr=x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$x^3 + x^2z + 2x^2 + xy + x - 3$
La fonction collect () sur cette expression résulte comme suit -
>>> collect(expr,x)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$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)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$Y^3+Y^2(x+4z)+y(4xz+2x)$
Annuler
La fonction cancel () prendra n'importe quelle fonction rationnelle et la mettra dans la forme canonique standard, p / q, où p et q sont des polynômes développés sans facteurs communs. Les principaux coefficients de p et q n'ont pas de dénominateurs, c'est-à-dire qu'ils sont des entiers.
>>> expr1=x**2+2*x+1
>>> expr2=x+1
>>> cancel(expr1/expr2)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$x+1$
>>> expr = 1/x + (3*x/2 - 2)/(x - 4)
>>> expr
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$\frac{\frac{3x}{2} - 2}{x - 4} + \frac{1}{x}$
>>> cancel(expr)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$\frac{3x^2 - 2x - 8}{2x^2 - 8}$
>>> expr=1/sin(x)**2
>>> expr1=sin(x)
>>> cancel(expr1*expr)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$\frac{1}{\sin(x)}$
trigsimp
Cette fonction est utilisée pour simplifier les identités trigonométriques. On peut noter que les conventions de dénomination des fonctions trigonométriques inverses consistent à ajouter un a au début du nom de la fonction. Par exemple, le cosinus inverse, ou arc cosinus, est appelé 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
La fonction trigsimp utilise l'heuristique pour appliquer la meilleure identité trigonométrique appropriée.
powerimp
Cette fonction réduit l'expression donnée en combinant des puissances avec des bases et des exposants similaires.
>>> expr=x**y*x**z*y**z
>>> expr
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$x^y x^z y^z$
>>> powsimp(expr)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$x^{y+z} y^z$
Vous pouvez faire en sorte que powsimp () ne combine que des bases ou ne combine que des exposants en changeant combine = 'base' ou combine = 'exp'. Par défaut, combine = 'all', qui fait les deux. Si force est Vrai, les bases seront combinées sans vérifier les hypothèses.
>>> powsimp(expr, combine='base', force=True)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$x^y(xy)^z$
combsimp
Les expressions combinatoires impliquant des binômes factoriels et peuvent être simplifiées en utilisant la fonction combsimp (). SymPy fournit une fonction factorielle ()
>>> expr=factorial(x)/factorial(x - 3)
>>> expr
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$\frac{x!}{(x - 3)!}$
Pour simplifier l'expression combinatoire ci-dessus, nous utilisons la fonction combsimp () comme suit -
>>> combsimp(expr)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$x(x-2)(x-1)$
Le binôme (x, y) est le nombre de façons de choisir y éléments parmi un ensemble de x éléments distincts. Il est également souvent écrit sous la forme xCy.
>>> binomial(x,y)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$(\frac{x}{y})$
>>> combsimp(binomial(x+1, y+1)/binomial(x, y))
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$\frac{x + 1}{y + 1}$
logcombine
Cette fonction prend des logarithmes et les combine en utilisant les règles suivantes -
- log (x) + log (y) == log (x * y) si les deux sont positifs
- a * log (x) == log (x ** a) si x est positif et a est réel
>>> logcombine(a*log(x) + log(y) - log(z))
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$a\log(x) + \log(y) - \log(z)$
Si le paramètre de force de cette fonction est défini sur Vrai, les hypothèses ci-dessus seront supposées être valables s'il n'y a pas d'hypothèse déjà en place sur une quantité.
>>> logcombine(a*log(x) + log(y) - log(z), force=True)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$\log\frac{x^a y}{z}$