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

标签 python sympy commutativity

假设你在一个 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)

this answer据说如果不替换符号就无法在创建后更改符号的交换性,但也许有一种简单的方法可以像这样在 block 中更改表达式的所有符号?

最佳答案

如果您希望 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()

这将返回 True。

关于python - 使所有符号在 sympy 表达式中可交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48291209/

相关文章:

python - Django模型减少重复代码

python - 在Python中减少矩阵元素的系数

python-2.7 - 无法区分 python 中的变量

python - 将 numpy.float64 转换为 float 时的奇怪行为

python - 如何为特定 View 创建 Flask before_request View ?

python - 无法使用 python selenium 获取动态元素

python - 非交换函数乘积的导数

ruby - 为什么乘法在 Ruby 中并不总是可交换的?

python - 什么是更 pythonic - 函数组合、lambda 或其他东西?

haskell - Haskell 运算符的交换性质?