多くの右側のスパース線形ソルバー


12

多くの右側(300から1000)で同じ疎な線形システム(300x300から1000x1000)を解く必要があります。この最初の問題に加えて、さまざまなシステムを解決したいと思いますが、同じ非ゼロ要素(値が異なる)で、スパースパターンが一定の多くのスパースシステムです。私の行列は不定です。

因数分解と初期化のパフォーマンスは重要ではありませんが、解決段階のパフォーマンスは重要です。現在、私はPaStiXまたはUmfpackを検討しています。おそらく、両方のソルバーをサポートするPetscをいじります多分私のニーズに合わせて少し変更しますか?

スパース行列がまでの場合はどうなりますか?106×106

回答:


10

直接ソルバーを使用するか反復ソルバーを使用するかについて議論することなく、2つのポイントを追加します。

  1. 複数の右辺を持つシステム用のKrylovメソッドがあります(ブロックKrylovメソッドと呼ばれます)。追加のボーナスとして、クリロフ空間はより大きなベクトルのコレクションから構築されるため、これらは標準のクリロフ法よりも収束が速いことがよくあります。ダイアンP.オレアリー、ブロック共役勾配アルゴリズムと関連メソッドを参照してください線形代数とそのアプリケーション29(1980)、ページ239-322。およびMartin H. Gutknecht、複数の右辺を持つ線形システムのブロッククリロフ空間法:紹介(2007)。

  2. 同じスパースパターンの異なる行列がある場合、最初の行列のシンボリック分解を事前計算できます。これは、この行列と後続の行列の数値分解の計算に再利用できます。(UMFPACKでは、これを使用umfpack di symbolicして結果をに渡すことができますumfpack_di_numeric。)



3

「同じ非ゼロ要素(値が異なるだけ)」について話すとき、問題のステートメントで明確ではありません。マトリックスは一定のスパースパターンを持っているが、実際の値は変化していると言っていますか。または、マトリックスが実際に一定であると言っていますか?

PA=LUO(n2)

複数の右辺とこのサイズの方程式系の場合、通常、反復法は価値がありません。

あなたが言及したすべてのパッケージは、直接因数分解法を提供します(ただし、PetScはその反復ソルバーでほとんど知られています)。しかし、システムは非常に小さいため、特に分散メモリ環境では大幅な並列高速化が得られません。

この仕事にUmfpackを使用することをお勧めします。PaStixとPetScは過剰です。


ご回答有難うございます。明確にするために:最初に多くの右辺を持つ単一の行列を要求し、次に別の問題は同じスパースパターンを持つ行列のコレクションですが、値が変化し、それぞれが多くのrhsに対して解かなければなりません。補助的な質問:スパース行列が10 ^ 5x10 ^ 5から10 ^ 6x10 ^ 6になったらどうなりますか?
nat chouf

2
105

特に非常に正確なソリューションを必要としない場合、特に効果的な前提条件を見つけることができる場合、またはシステムが既に十分に条件付けられている場合は、単一の右手だけで大規模システムに反復法を使用するのが理にかなっています。ただし、システムの条件が悪い場合、正確な解決策が必要であり、適切な前提条件が見つからない場合は、直接因子分解を使用することをお勧めします。
ブライアンボーチャーズ

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