我想解决具有符号系数的非常简单的方程:

from sympy import *

a, b = symbols('a b', commutative=False)
x = IndexedBase('x')
basis = [a, b, a * b - b * a]
el = b * a - a * b
coefs = [x[k] for k in range(len(basis))]
eq = el - sum([c * bel for c, bel in zip(coefs, basis)])
solve(eq.expand(), coefs)

等式是 -x[0]*a - x[1]*b + x[2]*(-a*b + b*a) - a*b + b*a == 0,显然,解决方案是 x[0]=0, x[1]=0, x[2]=-1 ,但SymPy返回 [(-x[1]*a**(-1)*b + x[2]*a**(-1)*b*a - x[2]*b + a**(-1)*b*a - b, x[1], x[2])] .

我该如何解决这类方程?

我可以使用 collect() 来获取系数,提取它们,然后求解所有得到的方程式 . 但目前 collect() 对非交换符号不起作用 .

据我所知,问题是SymPy认为 a 可以等于 a*b (或者它们可以以其他方式相关) . 我怎么能告诉它这些符号和产品肯定是独特的,线性独立的,并且不能用另一种来表达?