2017-11-13 2 views
1

私は論理ネットの最小限の形を得るためにブーリアンの多項式を因数分解しようとしています。python sympyはブーリアンの多項式をよく考慮しません

:この(少なくとも)のように因数分解される関数に

f = a1*a2*b2*nb1 + a1*b1*na2*nb2 + a1*b1*na2 + a2*b2*na1*nb1 

を期待するならば私の変数が... NA3、NA2、

A3、A2、A1です...と負のカウンターパートのNA1 ​​

私は、このスクリプトを実行します。

import sympy 
a1,a2,b1,b2,b3,na1,na2,na3,nb1,nb2,nb3 = \ 
      sympy.symbols("a1:3, b1:4, na1:4, nb1:4", bool=True) 
f = "a1*na2*b1 + a1*a2*nb1*b2 + a1*na2*b1*nb2 + na1*a2*nb1*b2" 
sympy.init_printing(use_unicode=True) 
sympy.factor(f) 

を、これは私に同じ機能ではなく、因数分解を返します。

a1*a2*b2*nb1 + a1*b1*na2*nb2 + a1*b1*na2 + a2*b2*na1*nb1 

私は間違っていますか?

+0

これは役に立ちますか? http://docs.sympy.org/latest/modules/polys/wester.html#advanced-factoring-over-finite-fields –

+0

結果をテストしましたか? – amastrobera1

+0

いいえ、私は有限のフィールドについていくつか知っていますが、sympyは使用しません。私はちょうどそれが役に立つと思った。 –

答えて

2

あなたの期待出力

​​

がfの因数分解ではないので、factorは、それを生産するつもりはありません。何かを因数化することは、それを製品として書くことを意味し、「製品プラス他のもの」ではありません。

実際に因数分解できる多項式、たとえばf = a1*na2*b1 + a1*a2*nb1*b2 + a1*na2*b1*nb2を指定すると、factor(f)が影響します。

あなたが探しているものは、collectで行われる同じ変数の用語集に近いです。

f = a1*na2*b1 + a1*a2*nb1*b2 + a1*na2*b1*nb2 + na1*a2*nb1*b2 
collect(f, a1) 

出力

a1*(a2*b2*nb1 + b1*na2*nb2 + b1*na2) + a2*b2*na1*nb1 

また、前式の括弧の内容を返しf.coeff(a1)、例えば、その方向に動作coeff方法。

+0

ああ。いい物。私の間違いは、文字列引数 'a1 * na2 * b1 + ...'でsympyを使うことだったので、私が試した "collect"やその他のものはうまくいきませんでした。ありがとうございました – amastrobera1

関連する問題