我正在计算SymPy中的简化梯队形式。我正在尝试获取以下矩阵的数据透视列:
exercise4 = Matrix([[1,3,5,7],[3,5,7,9],[5,7,9,1]])
我用以下内容检查矩阵:
exercise4.rref()[0]
Matrix([
[1, 0, -1, 0],
[0, 1, 2, 0],
[0, 0, 0, 1]])
。顺便说一句,这与我的 NumPy 简化矩阵不同
exercise4 = np.array([[1,3,5,7],[3,5,7,9],[5,7,9,1]])
exercise4[1] = exercise4[1] + -3*exercise4[0]
exercise4[2] = exercise4[2] + -5*exercise4[0]
exercise4[1] = -1/4*exercise4[1]
exercise4[0] = exercise4[0] + -3*exercise4[1]
exercise4[2] = exercise4[2] + 8*exercise4[1]
exercise4
array([[ 1, 0, -1, -2],
[ 0, 1, 2, 3],
[ 0, 0, 0, -10]])
rref()[1]
这里返回(0, 1, 3)
,其中第三个元素显然是不正确的,因为它是增强矩阵的最后一个元素。第三行不一致,不应有第三列透视列。
sympy.Matrix().rref()
的固有缺陷是它会错误地解释不一致的枢轴列吗?这是我需要注意的事情,还是有办法解决这个问题?
在 [2,3] 上进行透视会产生rref
矩阵:
In [269]: M
Out[269]:
array([[ 1., 0., -1., -2.],
[ -0., 1., 2., 3.],
[ 0., 0., 0., -10.]])
In [271]: M[0]-=M[2]*(-2/-10)
In [276]: M[1]-=M[2]*(3/-10)
In [278]: M[2]/= -10
In [281]: M
Out[281]:
array([[ 1., 0., -1., 0.],
[ 0., 1., 2., 0.],
[-0., -0., -0., 1.]])
当我将您的矩阵插入交互式表单时,我得到sympy
结果
http://www.math.odu.edu/~bogacki/cgi-bin/lat.cgi?c=rref
这里也是: https://www.emathhelp.net/calculators/linear-algebra/reduced-row-echelon-form-rref-caclulator/
此版本减少了最后一行,因此所有前导词均为 1。 但有一个来源允许:
https://stattrek.com/statistics/dictionary.aspx?definition=reduced_row_echelon_form
注意:一些参考文献对行梯队形式的描述略有不同。它们不要求每行中的第一个非零条目等于 1。