1 回答
TA贡献1951条经验 获得超3个赞
常量的自动分配是一个敏感的主题。有一个选项可以禁用它,如下所示:
from sympy.core.evaluate import distribute
with distribute(False):
poly1 = 6/(25*(x+3)) + 1/(5*(x + 3)**2)
print(poly1) # 6/(25*(x + 3)) + 1/(5*(x + 3)**2)
或者您可以将 25 包裹起来UnevaluatedExpr以防止其与其他术语发生交互。
poly1 = 6/(UnevaluatedExpr(25)*(x+3)) + 1/(5*(x + 3)**2)
print(poly1) # 6*25**(-1)/(x + 3) + 1/(5*(x + 3)**2)
或者在分母中使用未评估的乘积 (Mul):
poly1 = 6/Mul(25, x+3, evaluate=False) + 1/(5*(x + 3)**2)
print(poly1) # 6/(25*(x + 3)) + 1/(5*(x + 3)**2)
或者将分母包裹起来factor_terms——一种更温和的形式,factor它可以提取系数而不会过多地混淆表达式。
poly1 = 6/factor_terms(25*(x+3)) + 1/(5*(x + 3)**2)
print(poly1) # 6/(25*(x + 3)) + 1/(5*(x + 3)**2)
或者通过引入一个看起来像数字的符号来作弊:
c25 = symbols('25')
poly1 = 6/(c25*(x+3)) + 1/(5*(x + 3)**2)
print(poly1) # 1/(5*(x + 3)**2) + 6/(25*(x + 3))
第二个问题,关于有针对性的替换,在这种笼统的情况下很难回答。必须通过表达式树递归,重建expr为expr.func(*args)where argsare expr.args,可能已修改。主要问题是您如何知道该实例25*x + 75是应该替换的实例。
添加回答
举报