2016-08-04 18 views
2

是否有sympy函數將表達式的所有表達式的公式提取爲Add,MulDiv提取表達式的條件

例如:

(x**2 +(x-1)*ln(x)+(x+2)/(x-1)) 

我想:

[x**2,(x+1)*ln(x),(x+2)/(x-1)] 

同樣的事情德穆爾:

(x-1)*ln(x) : [(x-1),ln(x)] 

和Divison:

(x+2)/(x-1) : [x+2,x-1] 
+0

可以使用AST模塊。 –

+1

@JoseRaulBarreras他可以使用AST,但很可能_不應_。使用現有的SymPy工具會更容易*。 (「容易得多」我的意思是容易上千倍)。 –

回答

1

一筆或產品,你可以使用expr.args

In [1]: ((x**2 +(x-1)*ln(x)+(x+2)/(x-1))).args 
Out[1]: 
⎛ 2 x + 2    ⎞ 
⎜x , ─────, (x - 1)⋅log(x)⎟ 
⎝ x - 1    ⎠ 

In [2]: ((x-1)*ln(x)).args 
Out[2]: (x - 1, log(x)) 

對於一個部門,SymPy代表x/yx*y**-1(沒有劃分階級,只有MulPow)。

In [3]: ((x+2)/(x-1)).args 
Out[3]: 
⎛ 1   ⎞ 
⎜─────, x + 2⎟ 
⎝x - 1  ⎠ 

但是,您可以使用fraction拆分它

In [4]: fraction((x+2)/(x-1)) 
Out[4]: (x + 2, x - 1)