如果我要求 SymPy 对奇异矩阵进行行约简
nu = Symbol('nu')
lamb = Symbol('lambda')
A3 = Matrix([[-3*nu, 1, 0, 0],
[3*nu, -2*nu-1, 2, 0],
[0, 2*nu, (-1 * nu) - lamb - 2, 3],
[0, 0, nu + lamb, -3]])
print A3.rref()
然后它返回单位矩阵
(Matrix([
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]), [0, 1, 2, 3])
它不应该这样做,因为矩阵是奇异的。为什么 SymPy 给了我错误的答案,我怎样才能让它给我正确的答案?
我知道 SymPy 知道矩阵是单数的,因为当我要求 A3.inv() 时,它给出
raise ValueError("Matrix det == 0; not invertible.")
此外,当我从矩阵中删除lamb(相当于设置lamb = 0)时,SymPy 给出了正确答案:
(Matrix([
[1, 0, 0, -1/nu**3],
[0, 1, 0, -3/nu**2],
[0, 0, 1, -3/nu],
[0, 0, 0, 0]]), [0, 1, 2])
这让我相信这个问题只发生在不止一个变量上。
编辑:有趣的是,当我通过 rref() 参数“simplify=True”时,我得到了正确的答案。我仍然不知道为什么会这样。