我正在做一个非常简单的概率计算,从一组A-Z(具有相应的概率x,y,z)获取X,Y,Z的子集。在sympy中分解多边形
因为非常沉重的公式而且,为了处理他们,我想简化(或收集或因素 - 我不知道确切的定义)使用sympy这些多项式。
所以..有这个
import sympy as sp
x, y, z = sp.symbols('x y z')
expression = (
x * (1 - x) * y * (1 - x - y) * z +
x * (1 - x) * z * (1 - x - z) * y +
y * (1 - y) * x * (1 - y - x) * z +
y * (1 - y) * z * (1 - y - z) * x +
z * (1 - z) * y * (1 - z - y) * x +
z * (1 - z) * x * (1 - z - x) * y
)
我想要得到的东西(一个非常简单的概率计算得到X,Y,从集AZ的的Z子集与相应的概率X,Y,Z的表达)这样
x * y * z * (6 * (1 - x - y - z) + (x + y) ** 2 + (y + z) ** 2 + (x + z) ** 2)
聚,在改写的方式有尽可能少的操作(+
,-
,*
,**
,...)尽可能
我试过factor()
,collect()
,simplify()
。但结果与我的预期不同。主要是我得到
2*x*y*z*(x**2 + x*y + x*z - 3*x + y**2 + y*z - 3*y + z**2 - 3*z + 3)
我知道sympy可以结合多项式成简单的形式:
sp.factor(x**2 + 2*x*y + y**2) # gives (x + y)**2
但如何让sympy到从表达式组合多项式以上?
如果在sympy中这是不可能的任务,可能还有其他的选择吗?
尼斯组合,但它很难理解。你能解释算法/想法吗?顺便说一句,我发现了一个明显的错误:'x *(1-x)* y *(1-x-y)* z + ...' - >'x /(1 - x)* y /(1 - x - y )* z + ...',对于这样的情商你的组合不起作用(我想这是因为明显的事情,但因为我不知道algorythm ....) – akaRem 2013-03-04 21:54:09