2011-06-09 40 views
2

我只是試圖創建一個3x3矩陣逆JAMA文檔後的矩陣。但每一次它給我下面的錯誤 -異常在線程「主」java.lang.RuntimeException:矩陣單數

Exception in thread "main" java.lang.RuntimeException: Matrix is singular

誰能幫助我在這方面?

+2

你的3x3矩陣是什麼?我的猜測是它不可逆 - 見http://en.wikipedia.org/wiki/Invertible_matrix – 2011-06-09 09:09:39

+0

這是模糊的:你的問題沒有引用任何源代碼,它沒有堆棧跟蹤。另外,您指的是什麼JAMA文檔? – 2011-06-09 09:13:55

回答

1

如果你可以計算矩陣的行列式,你會發現它是零(或接近它)。

您可能可以通過檢查來判斷。如果一行與另一行成比例,則您的矩陣不可逆。

3x3很容易手工翻轉。嘗試一下,看看它出錯的地方。

試試SVD解決方案。它會告訴你什麼是你的矩陣的零空間。

+0

謝謝......這有幫助..其實是的,我無法意識到我生成的3x3矩陣在一行與另一行成正比的情況下得到了這樣的值。顯然我修復了這一點。 :) – Pow 2011-06-09 17:13:13

+0

對,一行與另一行成比例的說,你可以通過比例值進行劃分,並以相同的左側結束兩個表達式。如果他們有相同的右手邊,那麼你實際上只有兩個方程式。如果他們有不同的右手邊,這是不一致的。用非數學術語來看問題:x + y + z = 4和x + y + z = 6不能同時爲真。 – duffymo 2011-06-09 17:21:07

2

Jama的文檔不是很好。

事實上,如果你看看通過源代碼,你會發現,Matrix.inverse()最終調用LUDecomposition.solve(...)和代碼說:

270  /** Solve A*X = B 
    271  @param B A Matrix with as many rows as A and any number of columns. 
    272  @return  X so that L*U*X = B(piv,:) 
    273  @exception IllegalArgumentException Matrix row dimensions must agree. 
    274  @exception RuntimeException Matrix is singular. 
    275  */ 
    277  public Matrix solve (Matrix B) { 
    278   if (B.getRowDimension() != m) { 
    279   throw new IllegalArgumentException("Matrix row dimensions must agree."); 
    280   } 
    281   if (!this.isNonsingular()) { 
    282   throw new RuntimeException("Matrix is singular."); 
    283   } 

由於維基說:

「線性代數的如果存在n×n矩陣B使得AB = BA = 1,則n×n(正方形)矩陣A被稱爲可逆的或非奇異的或非簡併的n 其中I n表示n乘n的單位矩陣,所用的乘法是普通的矩陣乘法。

總之,單數意味着不可逆的。


如果你不滿意JAMA,看看在Apache共享數學庫,特別是Linear Algebra module

+0

謝謝......我會看看圖書館。 – Pow 2011-06-09 17:14:02

1

嗯,它告訴你你需要知道的一切:你想要反轉的矩陣是單數。

奇異矩陣是不可逆的。

如果您認爲您的矩陣不是單數,請發佈它,我們會看看。

相關問題