Matrix 三对角矩阵的LU分解(Java)

Matrix 三对角矩阵的LU分解(Java),matrix,decomposition,Matrix,Decomposition,我正在创建一个类来表示三对角矩阵。这些是平方矩阵,在对角线上有一组非零值,在上下对角线上有非零值,然后在其他地方有零 为了存储它们,我使用了三个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

我正在创建一个类来表示三对角矩阵。这些是平方矩阵,在对角线上有一组非零值,在上下对角线上有非零值,然后在其他地方有零

为了存储它们,我使用了三个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,这正是我所需要的

有谁知道一个好的,易于编程的算法来为我做到这一点。我不寻找任何有效的,只是一个最简单的程序真的


非常感谢

这是家庭作业吗

为什么要重新发明轮子?使用此链接了解如何使用
C.
进行LU分解。抱歉,您必须翻译成Java


这种方法的问题在于,它似乎假设我将数据存储在矩阵中作为二维数组,而实际上我将数据存储在三个一维数组中。如果我要使用它,那么我将不得不改变矩阵的结构,这会破坏我目前所做的存储工作。我有一个普通矩阵(非三对角)的类,实际上我使用了一个非常类似的方法,因为我使用了一个2D数组。所以你的问题不是LU分解特定的,而是存储相关的。a是否无法将元素
lu[i][j]
转换为您的存储方案?
static double[][] MatrixDecompose(double[][] matrix,
  out int[] perm, out int toggle) {
  ...
}