将 Sympy 表达式简化为变量的隐式函数
Simplifying Sympy expressions as implicit functions of variables
我想知道是否有任何方法可以通过根据已定义的变量重写表达式来简化 Sympy 表达式,使 Python 收集符合该变量定义的术语。
提前致谢。
像你描述的这样的东西并不完全存在,但做你想做的并不难。
首先是cse()
function,它会自动提取公共子表达式作为变量。但是,如果您需要的话,它不会使用预定义的变量。但是,如果您的目标只是简化表达式的计算,并且您并不真正关心中间表达式是什么,那么 cse
是您最好的选择。
您可以使用的一个技巧是隔离子表达式的单个部分并替换它们。例如,假设您有一个包含 x + y
的表达式 expr
,并且您想将 x + y
替换为 z
。简单地做 expr.subs(x + y, z)
通常有效。但在某些情况下,它不会因为 subs
仅在它在表达式中准确找到它时才替换 x + y
。
您可以使用的一个技巧是 "solve"(如果您愿意,可以使用 solve
自动执行)替换 z = x + y
单个变量,例如 x = y - z
,并替换它 (expr.subs(x, y - z)
)。由于 x
出现的位置与 x + y
一样没有歧义,这将在任何地方替换它。然后,您通常必须 expand
表达式才能抵消事物。
我想知道是否有任何方法可以通过根据已定义的变量重写表达式来简化 Sympy 表达式,使 Python 收集符合该变量定义的术语。
提前致谢。
像你描述的这样的东西并不完全存在,但做你想做的并不难。
首先是cse()
function,它会自动提取公共子表达式作为变量。但是,如果您需要的话,它不会使用预定义的变量。但是,如果您的目标只是简化表达式的计算,并且您并不真正关心中间表达式是什么,那么 cse
是您最好的选择。
您可以使用的一个技巧是隔离子表达式的单个部分并替换它们。例如,假设您有一个包含 x + y
的表达式 expr
,并且您想将 x + y
替换为 z
。简单地做 expr.subs(x + y, z)
通常有效。但在某些情况下,它不会因为 subs
仅在它在表达式中准确找到它时才替换 x + y
。
您可以使用的一个技巧是 "solve"(如果您愿意,可以使用 solve
自动执行)替换 z = x + y
单个变量,例如 x = y - z
,并替换它 (expr.subs(x, y - z)
)。由于 x
出现的位置与 x + y
一样没有歧义,这将在任何地方替换它。然后,您通常必须 expand
表达式才能抵消事物。