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

时间:2013-04-01 18:35:19

标签: 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     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的通用公式。

有没有人知道一个很好的,易于编程的算法来为我做这个。我不是在寻找任何有效的东西,只是最容易编程的东西。

非常感谢提前。

1 个答案:

答案 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) {
  ...
}