SymPy - Vereinfachung

Sympy hat die mächtige Fähigkeit, mathematische Ausdrücke zu vereinfachen. Es gibt viele Funktionen in SymPy, um verschiedene Arten der Vereinfachung durchzuführen. Dort gibt es eine allgemeine Funktion namens simplify (), die versucht, zur einfachsten Form eines Ausdrucks zu gelangen.

vereinfachen

Diese Funktion ist im Modul sympy.simplify definiert. simplify () versucht, intelligente Heuristiken anzuwenden, um den Eingabeausdruck „einfacher“ zu machen. Der folgende Code vereinfacht den Ausdruck $ sin ^ 2 (x) + cos ^ 2 (x) $.

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

Das obige Code-Snippet liefert die folgende Ausgabe:

1

erweitern

Das expand () ist eine der häufigsten Vereinfachungsfunktionen in SymPy, die zum Erweitern von Polynomausdrücken verwendet wird. Zum Beispiel -

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

$a^2 - b^2$

Die Funktion expand () macht Ausdrücke größer und nicht kleiner. Normalerweise ist dies der Fall, aber häufig wird ein Ausdruck kleiner, wenn Sie expand () aufrufen.

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

Das obige Code-Snippet liefert die folgende Ausgabe:

-2

Faktor

Diese Funktion nimmt ein Polynom und zerlegt es in irreduzible Faktoren über die rationalen Zahlen.

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

$z(x + 2y)^2$

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

$(x + 1)^2$

Die Funktion factor () ist das Gegenteil von expand (). Jeder der von factor () zurückgegebenen Faktoren ist garantiert nicht reduzierbar. Die Funktion factor_list () gibt eine strukturiertere Ausgabe zurück.

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

sammeln

Diese Funktion sammelt zusätzliche Begriffe eines Ausdrucks in Bezug auf eine Liste von Ausdrücken bis zu Potenzen mit rationalen Exponenten.

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

Die Funktion collect () für diesen Ausdruck ergibt sich wie folgt:

>>> collect(expr,x)

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

stornieren

Die Funktion cancel () übernimmt jede rationale Funktion und bringt sie in die kanonische Standardform p / q, wobei p und q erweiterte Polynome ohne gemeinsame Faktoren sind. Die führenden Koeffizienten von p und q haben keine Nenner, dh sie sind ganze Zahlen.

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

$x+1$

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

>>> cancel(expr)

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

trigsimp

Diese Funktion wird verwendet, um trigonometrische Identitäten zu vereinfachen. Es ist anzumerken, dass Namenskonventionen für inverse trigonometrische Funktionen darin bestehen, ein a an die Vorderseite des Funktionsnamens anzuhängen. Beispielsweise wird der inverse Kosinus oder Bogenkosinus acos () genannt.

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

2

Die Trigsimp-Funktion verwendet Heuristiken, um die am besten geeignete trigonometrische Identität anzuwenden.

Powersimp

Diese Funktion reduziert den gegebenen Ausdruck, indem Potenzen mit ähnlichen Basen und Exponenten kombiniert werden.

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

$x^y x^z y^z$

>>> powsimp(expr)

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

Sie können dafür sorgen, dass powsimp () nur Basen kombiniert oder nur Exponenten kombiniert, indem Sie kombinieren = 'Basis' oder kombinieren = 'exp' ändern. Standardmäßig ist comb = 'all', was beides bewirkt. Wenn force True ist, werden Basen kombiniert, ohne nach Annahmen zu suchen.

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

$x^y(xy)^z$

Kammimpuls

Kombinatorische Ausdrücke mit faktoriellen und binomischen Ausdrücken können mithilfe der Funktion combsimp () vereinfacht werden. SymPy bietet eine Fakultät ()

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

Um den obigen kombinatorischen Ausdruck zu vereinfachen, verwenden wir die Funktion combsimp () wie folgt:

>>> combsimp(expr)

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

Das Binomial (x, y) gibt die Anzahl der Möglichkeiten an, y Elemente aus einer Reihe von x verschiedenen Elementen auszuwählen. Es wird auch oft als xCy geschrieben.

>>> binomial(x,y)

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

logcombine

Diese Funktion verwendet Logarithmen und kombiniert sie nach den folgenden Regeln:

  • log (x) + log (y) == log (x * y), wenn beide positiv sind
  • a * log (x) == log (x ** a) wenn x positiv und a real ist
>>> logcombine(a*log(x) + log(y) - log(z))

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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

Wenn der Kraftparameter dieser Funktion auf True gesetzt ist, wird davon ausgegangen, dass die obigen Annahmen gelten, wenn für eine Menge noch keine Annahme vorliegt.

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

Das obige Code-Snippet liefert eine Ausgabe, die dem folgenden Ausdruck entspricht -

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