2016-11-15 12 views
1

私はこの種の単純化を実現したい: e+ac+ad+bc+bd = e+(a+b)(c+d)。 SymPyの単純化関数のどれもがこのように働かなかった。 SymPyやPythonの他のどこかに、この種の単純化を行う方法がありますか?SymPyの式の簡素化

答えて

1

collect(expr, e, func=factor)を使用できます。

In [5]: expr = e + a*c + a*d + b*c + b*d 

In [6]: collect(expr, e, func=factor) 
Out[6]: e + (a + b)⋅(c + d) 
+0

一般的なケースでは可能ですか?たとえば、最初の変数の名前が「e」であることがわからない場合あるいは、変数の名前がわからないのですか? –

+0

一般に、この「部分的な」因数分解を行う方法について何かを知る必要があります。そのようなことはよく定義されていません。なぜなら、異なる部分に式を因数分解できる多くの方法があるからです(表現全体を因数分解するのではなく、常に一意です)。 – asmeurer

+0

"e"の代わりに他の式の部分からの記号があれば、同じ種類の簡略化を行うことはできますか?例えば、a + a * c + a * d + b * c + b * d = a +(a + b)・(c + d)。この場合、上記の方法は機能しません。 –