SymPy-簡略化

Sympyには、数式を単純化する強力な機能があります。SymPyには、さまざまな種類の単純化を実行するための多くの関数があります。simple()と呼ばれる一般的な関数は、式の最も単純な形式に到達しようとします。

簡略化する

この関数はsympy.simplifyモジュールで定義されています。simple()は、インテリジェントなヒューリスティックを適用して、入力式を「より単純」にしようとします。次のコードは、式$ sin ^ 2(x)+ cos ^ 2(x)$を簡略化したものです。

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

上記のコードスニペットは、次の出力を提供します-

1

展開

expand()は、SymPyで最も一般的な単純化関数の1つであり、多項式の展開に使用されます。例-

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

キャンセル

cancel()関数は、任意の有理関数を取り、それを標準の正規形式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$

Combine = 'base'またはcombine = 'exp'を変更することにより、powsimp()にベースのみを結合するか、指数のみを結合させることができます。デフォルトでは、combine = 'all'であり、両方を実行します。forceがTrueの場合、ベースは仮定をチェックせずに結合されます。

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

上記のコードスニペットは、以下の式と同等の出力を提供します-

$x^y(xy)^z$

コームシンプ

階乗二項式を含む組み合わせ式は、combsimp()関数を使用して簡略化できます。SymPyはfactorial()関数を提供します

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

上記のコードスニペットは、以下の式と同等の出力を提供します-

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

上記の組み合わせ式を単純化するために、combsimp()関数を次のように使用します。

>>> combsimp(expr)

上記のコードスニペットは、以下の式と同等の出力を提供します-

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

binomial(x、y)は、x個の個別のアイテムのセットからy個のアイテムを選択する方法の数です。また、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}$