[英]prevent Sympy from simplifying expression python after a substitution
我正在使用 Sympy 使用 Subs function 将一组表达式替换为另一个表达式,并且我希望程序不要重新排列或简化方程。 即如果我用x+y
代替a
in
a+b+c+a
返回x+y+b+c+x+y
有谁知道执行此操作的方法?
非常感谢
唯一的方法是执行Add(x, y, b, c, x, y, evaluate=False)
,遗憾的是这不是很容易使用。
我找到了一种更好的方法来解决这个问题,而不是使用像Add
这样的类。 如果你有一个有很多操作的表达式怎么办? 使用这些类会很麻烦。
相反,我们可以使用在上下文管理器内部使用的evaluate
function。 这是一个具有很多操作的表达式示例,但我们可以在不立即简化/评估表达式的情况下进行替换。
import sympy as sp
x, y = sp.symbols('x y')
expr = x**2*sp.sqrt(y**2 + 45*x)
print(expr)
# Substitute without evaluating
with sp.evaluate(False):
expr_subs = expr.subs([(x, 2), (y, 7)])
print(expr_subs)
print(expr_subs.doit())
这将是 output 所需要的:
x**2*sqrt(45*x + y**2)
2**2*sqrt(7**2 + 45*2)
4*sqrt(139)
请注意,在上下文管理器内部发生的任何替换都不会计算,但如果它在外部,它会。 使用doit()
方法评估/简化表达式,但如果在上下文管理器中调用doit()
会引发错误。 请注意,此 function 的文档(位于parameters.py
中)警告我们此功能是实验性的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.