我正在尝试部分反转一个非平方矩阵M:V->W的意义上,对于v中的某个基向量v\in,使得没有其他向量映射到Mv中,我想找到一个矩阵N,使得NMv=v。我说部分反演是因为可能存在其他线性无关的向量x,y,使得Mx=My.
我一直在使用sympy以编程的方式来实现这一点,我找到的唯一方法是使用伪逆函数.pinv()
。然而,这个函数挂在我想要(伪(反转的特定矩阵上——我不确定这是错误还是矩阵太大。
然而,Sympy可以通过运行非常快的.rref()
函数将M简化为行梯队形式。能够提取行运算(或基本矩阵(将是一件好事,因为它们可以很容易地反转以给出所需的结果。有没有办法从.rref()
函数(它也返回枢轴(中获得初等矩阵?有没有其他与.pinv()
无关的方法可以得到我想要的结果?
我猜你的意思是这样的:
In [32]: x, y = symbols('x, y')
In [33]: M = Matrix([[1, 1], [0, 1], [0, 0]])
In [34]: xy = Matrix([x, y])
In [35]: XY = Matrix([-1, 1])
In [36]: M
Out[36]:
Matrix([
[1, 1],
[0, 1],
[0, 0]])
In [37]: M*xy
Out[37]:
Matrix([
[x + y],
[ y],
[ 0]])
In [38]: solve(Eq(M*xy, M*XY), [x, y])
Out[38]: {x: -1, y: 1}
你可以通过形成增广矩阵并使用rref:来找到矩阵
In [39]: Matrix.hstack(M, eye(3)).rref()
Out[39]:
⎛⎡1 0 1 -1 0⎤ ⎞
⎜⎢ ⎥ ⎟
⎜⎢0 1 0 1 0⎥, (0, 1, 4)⎟
⎜⎢ ⎥ ⎟
⎝⎣0 0 0 0 1⎦ ⎠
In [40]: Matrix.hstack(M, eye(3)).rref()[0][:2,2:]
Out[40]:
Matrix([
[1, -1, 0],
[0, 1, 0]])
In [41]: M.pinv()
Out[41]:
Matrix([
[1, -1, 0],
[0, 1, 0]])