三重対角行列を表すクラスを作成しています。これらは、対角線上にゼロ以外の値のセットを持ち、上下の対角線上にゼロ以外の値を持ち、それ以外はすべてゼロである正方行列です。
それらを格納するために、3 つの 1D 配列を使用しています。対角線ごとに 1 つです。
次に例を示します。
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 用に 1 つ、u_i 用に 1 つ、l_i 用に 1 つの配列があります。ゼロは保存されません。
LU 分解を実行するアルゴリズムが必要です。LU 分解は通常、次の 2 つの行列を生成します。
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 のすべての一般式を見つける方法がわかりません。
私のためにこれを行うための、プログラムしやすいアルゴリズムを知っている人はいますか。私は効率的なものを探しているわけではなく、実際にプログラムするのが最も簡単なものを探しています。
よろしくお願いします。