在表达式中使所有符号可交换

glS*_*glS 2 python sympy commutativity

假设你在一个表情符号中有许多非交换符号,比如说

a, c = sympy.symbols('a c', commutative=False)
b = sympy.Symbol('b')
expr = a * c + b * c
Run Code Online (Sandbox Code Playgroud)

使表达式中的所有符号都可交换的首选方法是什么,例如,sympy.simplify(allcommutative(expr)) = c * (a + b)

这个答案中,声明在没有替换符号的情况下,没有办法在创建之后改变符号的交换性,但也许有一种简单的方法可以在块中更改像这样的表达式的所有符号?

小智 5

如果要Eq(expr, c * (a + b))评估为True,则需要使用其他通勤符号替换符号.例如:

replacements = {s: sympy.Dummy(s.name) for s in expr.free_symbols}
sympy.Eq(expr, c * (a + b)).xreplace(replacements).simplify()
Run Code Online (Sandbox Code Playgroud)

这返回True.