2016-08-24 41 views
2

我有以下表達式如何從多項式中提取分子和分母而不進行評估?

A=Symbol('A') 
x=Symbol('x') 
B=Symbol('B') 
C=Symbol('C') 
D=Symbol('D') 
expression=((A**x-B-C)/(D-1))*(D-1) 
n,d=fraction(expression) 

我得到以下結果:

n=A**x-B-C 
d=1 

我預期的結果是

n=(A**x-B-C)*(D-1) 
d=(D-1) 

是否有sympy方式或需要編寫自定義功能手柄

+0

由於Sympy取消了D-1項,因此'expression'是'(A ** x-B-C)'。據我所知,沒有簡單的方法來阻止取消。 – Dietrich

回答

2

使用UnevaluatedExpr()以防止評估表達。

from sympy import symbols, fraction, UnevaluatedExpr 

A,x,B,C,D = symbols('A x B C D') 

expression = (A**x-B-C)/(D-1)*UnevaluatedExpr(D-1) 
n,d = fraction(expression) 
print(n) 
print(d) 

這將返回

(A**x - B - C)*(D - 1) 
D - 1 

有關詳細信息,請參閱Sympy Advanced Expression Manipulation文檔頁面。