我正在创建一个类来表示三对角矩阵。这些是在对角线上有一组非零值的方阵,在上下对角线上有一组非零值,然后在其他任何地方都为零。
为了存储它们,我使用了三个一维数组:每个对角线一个。
这是一个例子:
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 的通用公式。
有谁知道一个很好的、易于编程的算法来为我做这件事。我不是在寻找任何有效的东西,只是最容易编程的东西。
首先十分感谢。