0
我正在創建一個類來表示三對角矩陣。這些矩陣在對角線上有一組非零值,在上下對角線上有非零值,在其他地方都是零。三對角矩陣的LU分解(Java)
要存儲它們,我使用三個1D陣列:每個對角線一個。
下面是一個例子:
d_0 u_0 0 0
l_0 d_1 u_1 0
0 l_1 d_2 u_2
0 0 l_2 d_3
所以這是對A_I一個陣列,一個用於u_i,一個用於L_I。零不存儲。
我需要一個算法來執行LU分解。 LU分解通常會產生以下兩個矩陣:
1 0 0 0
a_0 1 0 0
0 a_1 1 0
0 0 a_2 1
b_0 c_0 0 0
0 b_1 c_1 0
0 0 b_2 c_2
0 0 0 b_3
然而,1的是無用的作爲與零,他們只是浪費空間,所以我需要在算法返回以下三對角矩陣充當LU分解:
b_0 c_0 0 0
a_0 b_1 c_1 0
0 a_1 b_2 c_2
0 0 a_2 b_3
我已經設法獲得下列公式:
c_i = u_i for all i
b_0=d_0
l_i = a_i * b_i for all i
d_(i+1) = a_i * c_i + b(i+1) for i>=1
但我不知道如何找到一個通式爲所有A_I,b_i和c _i這是我所需要的。
有沒有人知道一個很好的,易於編程的算法來爲我做這個。我沒有尋找任何有效的東西,只是最容易編程的東西。
非常感謝。
與該方法的問題是,它似乎認爲我存儲在我的矩陣中的數據作爲一個二維數組的時候,其實我存儲它在三個1D陣列中。如果我要使用它,那麼我將不得不亂用改變矩陣的結構,這種方式正如我目前所做的那樣破壞了存儲事物的點。我有一個普通矩陣類(非三角對角線),實際上我使用的方法與此類似,因爲我使用的是二維數組。 –
所以你的問題不是特定的LU分解,而是與存儲相關。沒有辦法將元素'lu [i] [j]'轉換爲您的存儲方案? – ja72