使所有符号在 sympy 表达式中可交换
Make all symbols commutative in a sympy expression
假设你在一个 sympy 表达式中有许多不可交换的符号,比如
a, c = sympy.symbols('a c', commutative=False)
b = sympy.Symbol('b')
expr = a * c + b * c
使表达式中的所有符号都可交换的首选方法是什么,例如,sympy.simplify(allcommutative(expr)) = c * (a + b)
?
在 中指出,在创建后不替换符号就无法更改符号的交换性,但也许有一种简单的方法可以在块中更改表达式的所有符号,例如这个?
如果您希望 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()
这 returns 是的。
两条评论:
- 非交换量会因式分解(尽管它们尊重 nc expr 出现的那一侧)
- 虽然您有一个可靠的答案,但一个通常足够好的简单答案就是简化表达式的字符串版本
两者如下所示:
>>> import sympy
>>> a, c = sympy.symbols('a c', commutative=False)
>>> b = sympy.Symbol('b')
>>> expr = a * c + b * c
>>> factor(expr)
(b + a)*c
>>> S(str(_))
c*(a + b)
假设你在一个 sympy 表达式中有许多不可交换的符号,比如
a, c = sympy.symbols('a c', commutative=False)
b = sympy.Symbol('b')
expr = a * c + b * c
使表达式中的所有符号都可交换的首选方法是什么,例如,sympy.simplify(allcommutative(expr)) = c * (a + b)
?
在
如果您希望 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()
这 returns 是的。
两条评论:
- 非交换量会因式分解(尽管它们尊重 nc expr 出现的那一侧)
- 虽然您有一个可靠的答案,但一个通常足够好的简单答案就是简化表达式的字符串版本
两者如下所示:
>>> import sympy
>>> a, c = sympy.symbols('a c', commutative=False)
>>> b = sympy.Symbol('b')
>>> expr = a * c + b * c
>>> factor(expr)
(b + a)*c
>>> S(str(_))
c*(a + b)