我想用符号系数求解非常简单的方程式
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
(或者可以其他方式关联)。我怎么能说这些符号和乘积绝对是不同的,线性独立的,并且不能用另一种方式来表示?