我正在做一個非常簡單的概率計算,從一組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