sympy - 在矩阵中找到冲突的行

时间:2017-07-30 08:02:17

标签: python math matrix linear-algebra

我有一个矩阵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找到冲突的行?

1 个答案:

答案 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()或任何其他方法都找不到一个。