2012-03-01 13 views
3

私はAx = bというシステムを持っていますが、Bは定数ですが、Aは反復ごとに少量ずつ変化し続けます。私はUMAPACK 5を使ってこの線形システムをもう一度Aのように解決しています。疎行列にUMFPACKでは、シンボリックおよび数値分解を行う頻度はどのくらいですか?

  1. 計算行列A ONLY初めでのシンボリックと数値的分解、および各反復でAx = bのを解決するため、この数値オブジェクトを使用します(もちろん、私は、2つの方法で上記の操作を行うことができますAとAiは同じままです)。
  2. 行列A IN EACH反復(つまり、数値が変更された新しい数値オブジェクト)のシンボリックおよび数値分解を計算し、この新しい数値オブジェクトを使用してAx = bを解いてください。

上記のうちどれが正しいですか?私は上記の2つの手順について、全く異なる回答を期待しています。どんな助けやコメントも感謝しています。ありがとう。

答えて

2

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

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

シンボリック因子分解を再計算するかどうかは、シンボリック因子分解を計算するのにかかる時間と、正しい因子を用いてシンボリック因子分解を使用する場合の数値分解がどれほど早いかによって異なります。私が推測するのは、2つの値だけを変更してもベンチマークが必要な場合には、シンボリックな因子分解を再計算したくないということです。

+0

詳細をご覧いただきありがとうございます。 :) 私の行列は、10kX10k行列のたびに4つ未満のエントリが減算/追加されるように変更されていますが、この変更によって、Aの「小さい」エントリが0に近い数になることがあります。その場合、記号と数値の因数分解をもう一度再計算する必要があります。また、可能であれば、あなたはあなたが何を意味するのかを詳しく述べることができますか?「値が間違っていれば、正しい結果が得られます。あなたの助けをもう一度ありがとう。 – Chatter

+0

私はそれをうまくはっきりさせるために私の答えを少し書き直しました。 –

0

2番目の方法は、数値分解を計算する場合と同じですが、各反復で繰り返してください。

+0

ありがとうございます。 – Chatter

関連する問題