共役勾配法と双共役勾配法の違いは何ですか


9

これら2つの方法の違いは何ですか?ある方法で解決できる問題を、別の方法で解決できるでしょうか。それらの両方または1つをOpenMPやMPIと並列化できますか?

回答:


11

共役勾配法は、おそらく最も高速な反復ソルバーですが、対称的な正定システムに対してのみです。非常に便利なのは、不定行列または非対称行列に対して同様のプロパティを持つ反復法があった場合です。

CG法は、クリロフ部分空間内の各ステップで近似解を求めます。k

。Kk(A,b)={b,Ab,A2b,…,Akb}

双共役勾配法の本質的なアイデアは、2番目のクリロフ部分空間を維持することです。

Kk∗(あ、b)={b、あ∗b、(あ∗)2b、…、(あ∗)kb}

CGと同様の直交性プロパティを使用して、を解く際の安定性の問題を除いた再帰を求めます。あ∗あバツ=あ∗b

残念ながら、単純に適用すると失敗します。ただし、各BiCGステップの後に一般化最小残差(GMRES)アルゴリズムの1ステップを実行することにより、結果の反復は安定します。これは通常BiCG-Stabと呼ばれます。

そのため、BiCG-Stabは(原則として)CGよりも一般的なソルバーですが、CGが対象とした問題に適用すると、効率が低下します。BiCGまたはBiCG-stabは、より多くの行列-ベクトル乗算とより多くのドット積を必要とするため、分散メモリマルチプロセッシングを介して並列化すると、通信オーバーヘッドが増加しますが、それでも好きなだけスケールアップできます。

ここで注目すべき点が2つあります。これらは、今言った他のすべてのジャンクよりも重要です。

  1. すべての反復法(BiCG、GMRES、QMR ...)には、有限精度演算での収束に失敗する行列があります。

  2. したがって、特定の行列に適切な前提条件を考え出すことは、最適な外部レベルの反復ソルバーを使用するよりもおそらく重要です。

編集:オープンソースライブラリの場合、最も人気のある2つはPETScとTrilinosです。また、Pythonバインディング(petsc4pyおよびPyTrilinos)も入手することを強くお勧めします。Eigenを試すこともできます。一方には多くの機能はありませんが、もう一方には必要なものだけがあり、それ以上はありません。単にコードを使用するのではなく読み取る場合は、Eigenが最も簡単です。

参照:Yousef Saad、スパース線形システムの反復法 ; Nachtigal et al、Nonsymmetrix Matrix Iterationsはどのくらい高速ですか?


BiCG用のオープンソースの並列ライブラリを知っていますか?
— user2196452 2014

純粋に理論的な関心から:対称正行列にBiCG(またはBiCGStab)を適用する場合、この方法は形式的に既知のものと同等ですか?
— shuhalo

5

共役勾配法はシステムを解くためにのみ機能します

あバツ=b

あ

f(バツ)=12バツTあバツ−bTバツ

導関数は

f』(バツ)=12あTバツ+12あバツ−b

ああT=あ

f』(バツ)=あバツ−b

f』(バツ)=0バツあ

二重共役勾配法は、どのシステムでも機能します。それは両方を解決することによってそうします

あバツ=b

に加えて

あTバツ=b

あ

システムの規模が大きい場合、並列処理に関する限り、ソルバーの反復に含まれる線形代数で多くの並列処理を行うことができるため、並列線形代数ライブラリがパフォーマンスの向上につながらない理由はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.