変数を並べ替えて最小帯域幅のバンド行列を生成する方法は?


15

私は有限差分によって2Dポアソン方程式を解こうとしています。このプロセスでは、各方程式に変数がしかないスパース行列を取得します。たとえば、変数が場合、離散化の結果は次のようになります。5U

Ui1,j+Ui+1,j4Ui,j+Ui,j1+Ui,j+1=fi,j

私はこのシステムを反復法で解くことができることを知っていますが、変数を適切に順序付ければ、直接法(すなわち、ガウス消去法w / oピボット)。これは可能ですか?他の、おそらく構造化されていないスパースシステムでこれを行うための戦略はありますか?


2
Cuthill-McKeeのようなものですか?
JM

興味深い... Cuthill-McKeeアルゴリズムについて聞いたことがありません!:)
ポール

1
また、Reverse Cuthill-McKeeもあります。
ジェフオックスベリー

1
私はそれが答えからも明らかであると思いますが、あなたはないではない、この問題のためにバンドソルバーを使用し、また最小限の帯域幅という順序を選択します。おそらく、質問や選択した答えを編集してこれを明確にすることができます。そうしないと、この神話が永続するのではないかと心配します。視覚的な比較を行い、scicomp.stackexchange.com/a/880/119の塗りつぶしを比較しました
ジェドブラウン

@JedBrown:実際、私はそれ自体ポアソン問題を扱っているわけではありません...私の問題はポアソン問題に似た構造を持っています...変数(iとj)のインデックスはまったく同じです。行列は対角線上にあり、非対角成分(同じ行内)が対角成分の正確な合計に加算されます。
ポール

回答:


13

これは、スパースダイレクトソルバーの分野でよく研究されている問題です。並べ替えとスーパーノードがフィルインと解決時間にどのように影響するかをよりよく理解するために Joseph Liuのマルチフロンタル法概要を読むことを強くお勧めします。

ネストされた解剖は、並べ替えを生成する非常に一般的な方法であり、基本的に再帰的なグラフ分割で構成されます。MeTiSはグラフ分割の事実上の標準であり、その背後にあるいくつかのアイデアについてはここで読むことができます。別の一般的に使用されるパッケージはSCOTCHであり、その作成者がMeTiSの背後にある基本的な考え方であるマルチレベルグラフパーティショニングを導入したため、Chacoも重要です

GeorgeとLiuは、古典的な本で 、2dのスパースダイレクトソリューションにはのみが必要であることを示しましたO(n3/2)作業とメモリ、3dのスパースはO n 2)の作業とO nは4 / 3メモリ。O(nlogn)O(n2)O(n4/3)


GeorgeとLiuの参考文献の引用はありますか?
ポール

追加; 最初に提出したとき、私は車から降りようとしていました。自由に利用できる本のオンライン版がどこかに存在することは知っています(Jedはそれがどこにあるかを知っています)が、見つけることができませんでした。
ジャックポールソン

書評の代わりに本のPDFを指すようにリンクを更新しました。
ジェドブラウン

@JedBrownそれは素晴らしい参考になりました!本当にありがとう!:)
ポール

1
@Alexander Everyoneは、GeorgeとLiuにバインドされた3Dを属性としていますが、本で明示的に指摘しているかどうかはわかりません。しかし、理論から明らかです。最小頂点セパレータの格子であるN 2 / 3 = M × M。緻密そのスーパーノードに関連付けられた行列有するN 2 / 32 = N 4 / 3エントリと必要N 2 / 33 = N 2n=m×m×mn2/3=m×mn2/32=n4/3n2/33=n2ファクタリングする操作。2Dの場合の対数項はより微妙で、第8章の入れ子解剖で扱われ、下限を達成します。
ジェドブラウン

5

Cuthill-McKeeは、やりたいことの事実上の標準です。この方法を試してみたい場合は、Boost Graph Library(BGL)にアルゴリズム(およびその逆)の使いやすい実装があり、ドキュメントにはその使用方法の例が含まれています。


実際にはCuhill-McKeeを逆にします。通常、塗りつぶしは少なくなります。ただし、ネストされた解剖の順序付けは、低帯域幅の順序付けよりもはるかに優れています。
アーノルドノイマイアー

4

マルチフロンタル法といえば、LU分解(UMFPACK)のマルチフロンタル法に取り組んでいるTim Davisには、充填を最小限に抑えるために行列を並べ替える多数のルーチンがあります。SuiteSparseの一部としてここにあります。SuiteSparseはMeTiSを使用します。

もう1つ注意すべき点があります。いくつかの問題では、変数の順序を賢くして、縞模様のパターン、または縞模様のパターンに近づけることができます。ただし、この巧妙な並べ替えには、ユーザー側の洞察が必要であり、ここでの回答で人々が言及したグラフ理論ベースの並べ替えアルゴリズムほど一般的ではありません。


どういたしまして、ポール。気に入ったら、投票してください。
ジェフオックスベリー

3

適用された数学サークルにはADI(Alternating Direction Implicit)と呼ばれるアルゴリズムがあり、物理学サークルには基本的に説明したことを実行するSplit-operatorがあります。これは反復的な方法であり、次の基本的な手順に従います。

  1. yバツ

  2. バツy

  3. エラーが希望どおりに小さくなるまで、1と2を繰り返します。

このアルゴリズムの正式な複雑さはわかりませんが、使用するたびにJacobiやGauss-Seidelのようなものよりも少ない反復回数で収束することがわかりました。


2
演算子分割ルートに進む場合、注意が必要なことは、演算子分割が定常状態のソリューションでエラーを引き起こすことがわかっている場合があることです。(私の研究室の1人がこの困難を克服する方法を開発しましたが、彼がまだそれを発表したとは思いません。)また、演算子の分割は数値エラーを引き起こすことが知られています。これらの誤差を事後的に推定する確立された方法があります。ドンエステップはその分野で素晴らしい仕事をしてきました。
ジェフオックスベリー

@GeoffOxberry別の分割について言及しているようですね。ADIは、システムを実際に解決するため、分割エラーのない完全に暗黙的なスキームで使用できます。分割エラーを厳密に制御するIMEXメソッドもあります。
ジェドブラウン

バツy

GodunovとStrangの分割について聞いたことがありません。Baker-Campbell-Hausdorfの式でオペレーターを分割する傾向があります。それは同じですか?
ダン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.