如何在SymPy中求解具有符号系数和非交换变量的方程式?

时间:2018-06-20 19:28:16

标签: python sympy equation-solving

我想用符号系数求解非常简单的方程式

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

0 个答案:

没有答案