我有一个矩阵A = Matrix([[1, 0, 0, 20], [-1, 1, 0, 0], [-2, 1, 0, 0], [0, -1, 1, 0]])
,一个同情对象。
我想知道是否存在冲突的行 - 意味着在减少矩阵之后的行,除了最右边的一行之外,行中的所有项都为零。
这似乎很容易在纸上做,但我想我误解了同情。 基本上rref方法的输出不是我预期的。
请注意,如果我们使用笔和纸行减少A
,我们应该在某一点获得Matrix([[1, 0, 0, 20], [0, 1, 0, 20], [0, 0, 0, 20], [0, 0, 1, 20]])
。
所以第2行是一个冲突的行。
然而,当我使用A.rref()
时,我完全得到了别的东西。我得到Matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])
并列出<class 'list'>: [0, 1, 2, 3]
我不明白他们是如何达到这个结果以及如何插入列表的。如何使用sympy找到冲突的行?
答案 0 :(得分:0)
同情的回答是正确的。您手动减少的矩阵不是行减少过程的结束,这解释了您的答案和同情之间的差异。
要继续从矩阵中减少行,请交换第2行和第3行(第3行和第4行),然后获得
matrix([
[ 1, 0, 0, 20],
[ 0, 1, 0, 20],
[ 0, 0, 1, 20],
[ 0, 0, 0, 20]])
现在从每个其他行中减去第3行(最后一行),然后将最后一行除以20,我们得到
matrix([
[ 1, 0, 0, 0],
[ 0, 1, 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
这是对此的回答。
有多种方法可以解释此结果。一种方法是考虑3个变量中的4个线性方程组 - 矩阵的最后一列保持方程右侧的常数,而其他列是变量系数。您的原始矩阵代表方程式
x = 20
- x + y = 0
- 2x + y = 0
- y + z = 0
和sympy的行减少表明该系统具有与
相同的解决方案 x = 0
y = 0
z = 0
0 = 1
当然,由于最后一个等式,它根本没有任何解决方案。
此外,您似乎对行减少可以做什么有误解。你问,&#34;如何使用sympy找到冲突的行?&#34;和&#34;如果存在冲突的行。&#34;行减少找不到哪个行冲突,如果行一起冲突,它会找到。 rref
进程无法显示冲突的行,因为如果需要交换行以在适当的位置获得非零透视值,因此开始和结束矩阵的行不对应。而且,一行与其他行冲突并不是真的,只是所有行一起冲突。在矩阵中,您可以删除前3行中的任何一行,结果将是非冲突的。 (删除最后一行仍然有一个冲突的矩阵。)那么你可以说哪一行冲突?通常没有一个冲突的行,因此rref()
或任何其他方法都找不到一个。