2017-07-30 40 views
0

我有一個矩陣A = Matrix([[1, 0, 0, 20], [-1, 1, 0, 0], [-2, 1, 0, 0], [0, -1, 1, 0]]),一個sympy對象。sympy - 在矩陣中找到衝突的行

我想知道是否有衝突的行 - 意思是在我減少矩陣之後,行中的所有項都是零,除了最右邊的那一行。

這似乎很容易在紙上做,但我想我誤解sympy。 基本上來自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

sympy的答案是正確的。您手動減少的矩陣不是減少行的過程的結束,它解釋了您的答案和sympy之間的區別。

要繼續行減少從你的矩陣,交換行2和3(第三和第四行),你會得到

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]]) 

這是sympy的答案。

有多種方法來解釋這個結果。一種方法是在3個變量中考慮4個線性方程的系統 - 矩陣的最後一列保持方程右側的常數,而其他列是變量係數。你原來的矩陣表示方程

x   = 20 
- x + y  = 0 
- 2x + y  = 0 
    - y + z = 0 

和sympy的行減少說明該系統具有相同的解決方案

x   = 0 
     y  = 0 
      z = 0 
       0 = 1 

其中,當然,已經完全沒有解決方案,這要歸功於最後一個方程。

此外,您似乎對減少行數可能會產生誤解。你問:「我如何使用sympy找到衝突的行?」和「如果有衝突的行」。行還原找不到哪一行發生衝突,它找到如果行一起出現衝突。 rref進程無法顯示衝突的行,因爲如果需要在適當位置獲得非零的主鍵值,它會交換行,所以起始矩陣和結束矩陣的行不相對應。另外,一行與其他行不一致也是不正確的,只是所有行一起發生衝突。在你的矩陣中,你可以刪除前3行中的任何一行,結果將是非衝突的。 (刪除最後一行仍然有一個衝突的矩陣。)那麼哪一行可以說衝突?通常沒有一個衝突的行,所以rref()或任何其他方法不可能找到一個。