我正在创建一个表示三对角矩阵的类。这些是方形矩阵,在对角线上具有一组非零值,在上下对角线上具有非零值,然后在其他地方具有零。
为了存储它们,我使用了三个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和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的通用公式。
有没有人知道一个很好的,易于编程的算法来为我做这个。我不是在寻找任何有效的东西,只是最容易编程的东西。
非常感谢提前。
答案 0 :(得分:0)
这是家庭作业吗?
为什么重新发明轮子?使用此链接了解如何使用C#
进行LU分解。对不起,你必须翻译成Java
http://msdn.microsoft.com/en-us/magazine/jj863137.aspx
static double[][] MatrixDecompose(double[][] matrix,
out int[] perm, out int toggle) {
...
}