2016-03-24 12 views
1

私はEigen's SparseLUとBicGSTABメソッドをいくつかの疎なマトリックスでテストしました。その密度の高いものは3000 * 3000から16000 * 16000までです。すべてのケースで、SparseLUはBicGSTABメソッドより約13%高速です。どちらのスパース線形ソルバが高速ですか? SparseLUまたはBiCGSTAB?

私はBiCGSTABにRowMajorスパース行列を与えなかったし、プリコンディショナーを与えなかった。それが遅い理由かもしれません。

私はどちらの方法もうまくいけば、どちらが速くなければならないのでしょうか?

マトリクスサイズが何百万にもなるとどうですか?

ありがとうございます!

+0

私の行列があり、新たな非ゼロ要素がで追加されていない、私は一度だけ前提条件を行うことができます場合は不規則な正方スパース行列 – user43506

答えて

0

直接的および反復的方法の性能は、全く異なる要因の影響を受けます。対称で正定値の行列を考えてみましょう。 直接的な方法の場合、最も重要な要素は、因数分解された行列が少ない数の新しい非ゼロ要素(いわゆる「塗りつぶし」)を持つような、行と列の最良の置換を見つけることです。できるだけ。 反復法の場合、最も重要な要素は固有値の分布です。例えば、共役勾配法(すべての数値演算が正確な数値を出力することを条件とする)は、完全に収束させるために、行列が有する多くの異なる固有値を反復する必要がある。 特定の物理的問題(例えば、有限差分法や有限要素法などによって解決される)について、対応する行列は、どのアプローチ(すなわち、直接的または反復的)を容易に予測する方法がないので、他のものより速く結果を出すだろう。 数百万の方程式からなる線形方程式のシステムでは、新しい非ゼロ要素が行列に現れないという理由だけで反復的アプローチがおそらくより望ましいでしょう。何百万という方程式からなるシステムの一例として、反復アルゴリズムで解決されていますが、私はあなたが以下のリンクにある問題を見てみることをお勧めします(これは典型的なFEAの問題です。 350万の方程式のシステムにつながる): http://members.ozemail.com.au/~comecau/CMA_Sparse.htm

+0

のですか?私は行列形式のとき、私は前提条件を行い、それはそれを意味します。私は行列の値を変更し、再度、AX = Bを解く際に他のすべての時間が、私は、任意の前提条件を実行し、直接解決のステップに進みません。これは時間を節約する良い方法ですか? – user43506

+0

ヤコビ前処理(一方単純で非常に人気のある)、それの目的は、1に等しいすべての行列」対角要素を作るために、それに応じて他のすべての要素を調整することであるので、CPU使用率の観点から、「微小」動作である(を含みます)溶液プロセスの完了時に、システムを解く前に、(a)の右側を調整し、(b)は、解ベクトル。あなたは、ヤコビの行列因数分解自体のコストに比べて、パフォーマンスを事前調整を心配してはいけません。 – SparseSolverCodes

0

パフォーマンスの違いの主な理由は既に説明しました。 「正しい」前提条件を選択すると、反復メソッドが大幅に高速化しています。

あなたはを参照してください可能性がある前処理行列の例のリストです:

  • ヤコビ
  • SOR
  • ILU
  • マルチグリッド

それぞれ、前提条件は、インクルードにもチューニングしなければならないいくつかのパラメータを持っています。

0

線形ソルバーの選択は、行列の固有値/固有ベクトルの分布と関係があります。対称正定行列がある場合は、共役勾配が良い選択肢です。反復回数は、条件番号(最大固有値/最小固有値)に依存します。楕円演算子から派生した行列の場合、条件数は行列のサイズとともに増加する。

ジョナサン・シェウク(Jonathan Shewchuk)がCGに関する素晴らしい説明をしています。 (https://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf)。

他のマトリックスタイプの場合、GMRESなどを使用できます。固有特性に基づいて決定する。 http://www.sam.math.ethz.ch/~mhg/pub/biksm.pdf

は、この情報がお役に立てば幸いです。この論文をチェックしてください。

関連する問題