私は有限差分によって2Dポアソン方程式を解こうとしています。このプロセスでは、各方程式に変数がしかないスパース行列を取得します。たとえば、変数が場合、離散化の結果は次のようになります。
私はこのシステムを反復法で解くことができることを知っていますが、変数を適切に順序付ければ、直接法(すなわち、ガウス消去法w / oピボット)。これは可能ですか?他の、おそらく構造化されていないスパースシステムでこれを行うための戦略はありますか?
私は有限差分によって2Dポアソン方程式を解こうとしています。このプロセスでは、各方程式に変数がしかないスパース行列を取得します。たとえば、変数が場合、離散化の結果は次のようになります。
私はこのシステムを反復法で解くことができることを知っていますが、変数を適切に順序付ければ、直接法(すなわち、ガウス消去法w / oピボット)。これは可能ですか?他の、おそらく構造化されていないスパースシステムでこれを行うための戦略はありますか?
回答:
これは、スパースダイレクトソルバーの分野でよく研究されている問題です。並べ替えとスーパーノードがフィルインと解決時間にどのように影響するかをよりよく理解するために、 Joseph Liuのマルチフロンタル法の概要を読むことを強くお勧めします。
ネストされた解剖は、並べ替えを生成する非常に一般的な方法であり、基本的に再帰的なグラフ分割で構成されます。MeTiSはグラフ分割の事実上の標準であり、その背後にあるいくつかのアイデアについてはここで読むことができます。別の一般的に使用されるパッケージはSCOTCHであり、その作成者がMeTiSの背後にある基本的な考え方でもあるマルチレベルグラフパーティショニングを導入したため、Chacoも重要です。
GeorgeとLiuは、古典的な本で 、2dのスパースダイレクトソリューションにはのみが必要であることを示しました作業とメモリ、3dのスパースはO (n 2)の作業とO (nは4 / 3)メモリ。
Cuthill-McKeeは、やりたいことの事実上の標準です。この方法を試してみたい場合は、Boost Graph Library(BGL)にアルゴリズム(およびその逆)の使いやすい実装があり、ドキュメントにはその使用方法の例が含まれています。
マルチフロンタル法といえば、LU分解(UMFPACK)のマルチフロンタル法に取り組んでいるTim Davisには、充填を最小限に抑えるために行列を並べ替える多数のルーチンがあります。SuiteSparseの一部としてここにあります。SuiteSparseはMeTiSを使用します。
もう1つ注意すべき点があります。いくつかの問題では、変数の順序を賢くして、縞模様のパターン、または縞模様のパターンに近づけることができます。ただし、この巧妙な並べ替えには、ユーザー側の洞察が必要であり、ここでの回答で人々が言及したグラフ理論ベースの並べ替えアルゴリズムほど一般的ではありません。
適用された数学サークルにはADI(Alternating Direction Implicit)と呼ばれるアルゴリズムがあり、物理学サークルには基本的に説明したことを実行するSplit-operatorがあります。これは反復的な方法であり、次の基本的な手順に従います。
エラーが希望どおりに小さくなるまで、1と2を繰り返します。
このアルゴリズムの正式な複雑さはわかりませんが、使用するたびにJacobiやGauss-Seidelのようなものよりも少ない反復回数で収束することがわかりました。