4

私はシステム Ax = b を持っています。ここで、B は定数ですが、A は反復ごとに少しずつ変化し続けます。私は UMFPACK 5 を使用して、この線形システムを A が変化するたびに解いています。上記は次の 2 つの方法で実行できます。

  1. 最初に行列 Aのみのシンボリックおよび数値因数分解を計算し、各反復で Ax = b を解くためにこの数値オブジェクトを使用します (もちろん、スパース行列表現では、A が変化すると Ax も変化します。Ap と Ai は同じままです)。
  2. 行列 A IN EACHの反復 (つまり、A が変化するときの新しい数値オブジェクト)のシンボリックおよび数値因数分解を計算し、この新しい数値オブジェクトを使用して Ax = b を解きます。

上記の方法のうち、正しいものはどれですか?上記の2つの手順について、(予想どおり)まったく異なる回答が得られます。ヘルプやコメントをいただければ幸いです。ありがとう。

4

2 に答える 2

2

シンボリック因数分解は、スパース パターン (UMFPACK の表記の Ap と Ai) のみに依存します。数値因数分解は、実際の値 (Ax) に依存します。したがって、シンボリック因数分解は 1 回だけ計算する必要がありますが、因数分解ごとに数値因数分解を再計算する必要があります。

UMFPACK のドキュメントは、これが現実を少し単純化したものであることを示しています。実際、UMFPACK は実際の値を使用してシンボリック因数分解を行いますが、「小さい」値と「大きい」値のみを区別します。したがって、行列 A が少しだけ変化しても問題ありません。値 (Ax) が大きく変化して以前の「小さい」値が大きくなった場合、またはその逆の場合、シンボリック因数分解が変化する可能性があります。ただし、新しい Ax で古いシンボリック因数分解を使用すると、正しい数値因数分解と正しい解が得られますが、新しいシンボリック因数分解を使用すると、UMFPACK の方が (おそらく) 効率的です。

したがって、シンボリック因数分解を再計算するかどうかは、シンボリック因数分解の計算にかかる時間と、正しい Ax でシンボリック因数分解を使用した場合に数値因数分解がどれだけ速くなるかに依存します。私の推測では、いくつかの値のみを変更した場合、シンボリック因数分解を再計算したくないが、ベンチマークする必要があると思います。

于 2012-03-02T15:34:07.453 に答える
0

2 番目の方法は正しいです。数値因数分解を計算するかのように、各反復でそれを繰り返す必要があります。

于 2012-03-01T19:45:23.523 に答える