python sympy没有考虑布尔值的多项式

时间:2017-11-13 10:53:50

标签: python sympy

我试图将布尔值的多项式推算为逻辑网的最小形式。我的变量是a1,a2,a3 ......和负数对应的na1,na2,na3 ...

如果期望一个功能

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

要像这样考虑(至少):

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

我运行这个脚本:

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

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的预期输出

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

不是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

方法coeff也适用于该方向,例如,f.coeff(a1)会返回上一个公式中括号的内容。