n 個の任意の px 1 ベクトル x_i、pxk 行列 A_i、および npxp 正定値行列 S_i があり、*S_i* の一部 (多くの場合、ほとんど) は同じです (たとえば、2 つの異なる S 行列のみが適用され、1 つの正定行列が適用されます)。 i=1,..., n-1 および i=n の半正定 S)。すべての x_i と A_i に対して次の線形変換を行いたい:
x_i* = inv(L_i)x_i および
A_i* = inv(L_i)A_i、ここで
L_i は下三角行列であるため、L_i L'_i=S_i (または、D_i が対角行列の場合、L_i D_i L'_i=S_i よりも優れています)。
n は数個から数千個、またはそれ以上の範囲で、p は通常 10 未満、k は通常 100 未満です。Sにはゼロを含む行と列を含めることができ、元は _BB' として形成されます。ここで、B は下三重対角行列です。ただし、これらの B は使用できません。
精度を重視して、速度と精度の点でこれを達成する最適な方法は何でしょうか?
現在、私は自分で書いた LDL 分解関数をさまざまな S に使用し、L を反転して変換を計算しています。これは、少数の異なる S と大きな n のケースを扱ってきたからです。私が正しく理解していれば、精度の点で行列を明示的に反転せずに線形方程式を解く方が賢明ですが、速度のためにはより良いオプションのようです?
私は Fortran を使用しており、安定しているとは保証できない独自の LDL 分解などではなく、因数分解に LAPACK 関数を使用したいと考えていますが、どちらが良い方法かわかりません。