繁体   English   中英

防止 Sympy 在替换后简化表达式 python

[英]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) ,遗憾的是这不是很容易使用。

您也可以使用列表/元组解包来自动执行此操作

lst = (1,4,5,6, nsimplify(1/2))
lstadd = Add(*lst, evaluate=False)
display(lstadd)
display(nsimplify(lstadd))
display(lstadd.evalf())

在此处输入图像描述

我找到了一种更好的方法来解决这个问题,而不是使用像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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM