2014-02-25 150 views
0

我到處尋找這個東西,但是我錯了某處。在我的Java程序中,我創建了幾個2D數組。現在,我需要形成新的二維數組,其中包括以前的,反轉的,轉置的,乘法的,左分的,甚至更多的。他們中的一些人(簡單)我創造了自己,但是留下了師,右師,反而我沒有。Java中的矩陣操作

通過使用像Jama一樣的庫,會出現一些問題。

java.lang.RuntimeException: Matrix is rank deficient. 

我這樣的代碼是:

Matrix Am=new Matrix(A); 
Am=Am.inverse(); 

A是二維數組(MXN)和Am是2DArray A.創建新的矩陣

我想這樣做是爲了得到左除,但我不能先解矩陣求逆。

我的錯誤在哪裏?是否有人知道另一個庫從2DArray轉換爲Matrix,然後使用更復雜的矩陣運算(left div,inv ...)?

編輯

我用這個矩陣求逆得到A \ P(可以計算爲逆(A)* P,因爲我看到的地方)。你知道如何與賈馬得到A \ P嗎?這是我的主要問題,左派。

回答

1

矩陣庫,你可以檢查此question

但是你寫的代碼,沒有人能說什麼,你必須包括代碼本身,看看問題出在哪裏。

0

正如你的例外所述,你的矩陣是秩虧的,在數學上不可能計算一個逆矩陣。計算機在這些事務中不在數學之上。

這可能有多種原因。首先,對於平方輸入,僅存在逆矩陣,即格式n×n。你沒有說明是這樣。存在可以爲所有矩陣構造的僞逆的想法。

但即使對於矩陣矩陣,秩也可能是不足的,即矩陣可能是奇異的。具體而言,如果行列式爲零,則會發生這種情況。在計算方面,這也可能發生在其奇異值具有寬幅度範圍的惡化矩陣中。

你能提供發生問題的矩陣嗎?

+0

那麼好。我在這個矩陣上使用逆來得到A \ P(可以像我在某處看到的那樣計算爲逆(A)* P)。 你知道如何與賈馬得到A \ P嗎? – Aleksandar

+0

通常情況下,你沒有。你所做的是解決一個線性系統。即,二次矩陣A被分解爲PLU或QR,並且該分解用於求解AX = P。如果計算A = QR,那麼這些步驟將乘以Q^T * P,然後對三角形因子應用回代。 - 這一切都假定A是二次的,規則的和有條件的。違反任何這些條件將阻止或中止計算。 – LutzL

+0

好的,明白了。我會嘗試另一種方式來解決問題,而不使用這個公式...謝謝。 – Aleksandar

0

如果矩陣的秩< =分鐘(numOfRows,numOfColumns)其說是秩虧及其不可能計算這樣的矩陣的逆。

0

A是二維陣列(M×N個),和我是從2DArray A.創建新的矩陣

確保您的矩陣是二次(N×N的),否則反是沒有定義。

如果無法避免的矩陣不是全排或二次,您可以考慮使用pseudo-inverse.

+0

我的矩陣不是二次的,但在文檔中說(據我所知)如果矩陣不是二次的,它將作爲僞逆返回。 – Aleksandar