我正在创建一个类来表示三对角矩阵。这些方阵在对角线上有一组非零值,上下对角线上也有一组非零值,其他地方都是零。
为了存储它们,我使用了三个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数组。0不被存储。
我需要一个算法来执行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和0一样没用,它们只是浪费空间,所以我要求算法返回以下三对角矩阵作为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
static double[][] MatrixDecompose(double[][] matrix,
out int[] perm, out int toggle) {
...
}