我试图将布尔值的多项式推算为逻辑网的最小形式。我的变量是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
我做错了什么?
答案 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)
会返回上一个公式中括号的内容。