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