2016-08-24 43 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文档页面。