我想知道是否有任何方法可以通过根据已定义的变量重写表达式来简化Sympy表达式,从而使Python收集符合该变量定义的术语。
提前致谢。
答案 0 :(得分:1)
这样的事情并不像你描述的那样存在,但是做你想做的事并不难。
首先,有cse()
function,它会自动将常见的子表达式作为变量。但是,如果这是你想要的,它将不会使用预定义的变量。但是如果你的目标只是简化表达式的评估,并且你并不关心中间表达式是什么,cse
是你最好的选择。
您可以使用的一个技巧是将子表达式中的单个部分隔离并替换它们。例如,假设您有一个包含expr
的表达式x + y
,并且您希望将x + y
替换为z
。简单地做expr.subs(x + y, z)
通常有效。但在某些情况下,它不会因为subs
仅在表达式中找到它而取代x + y
。
您可以使用的一个技巧是“解决”(如果您愿意,可以使用solve
自动执行)替换z = x + y
作为单个变量,例如x = y - z
,以及替换它(expr.subs(x, y - z)
)。由于x
出现的位置与x + y
不一致,因此无处不在。然后,您通常必须expand
表达式才能取消。