0

三重対角行列を表すクラスを作成しています。これらは、対角線上にゼロ以外の値のセットを持ち、上下の対角線上にゼロ以外の値を持ち、それ以外はすべてゼロである正方行列です。

それらを格納するために、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 のすべての一般式を見つける方法がわかりません。

私のためにこれを行うための、プログラムしやすいアルゴリズムを知っている人はいますか。私は効率的なものを探しているわけではなく、実際にプログラムするのが最も簡単なものを探しています。

よろしくお願いします。

4

1 に答える 1