SLEPcを使用した線形安定性解析から大規模な非エルミート一般化固有値問題を解く


8

一般化された行列問題があります。線形安定性解析問題のスペクトル法からのです。私の行列Bは対角で正の半定値です。Aは非エルミートで複雑です。Ax=λBx

私の問題は、SLEPcの一般化された固有値ソルバーを使用すると、「LU分解のピボットがゼロ」というエラーが発生することです。以下の残りの部分は、問題の詳細とこれまでに試したものです。助けてくれてありがとう!

問題の詳細

行列は最大で約48000 x 48000になり、固有値を見つけたいと思います。私が興味を持っている固有値は、0 + 0iの近くに実数部が最も大きいものです。理想的には、それらが内部にある場合(つまり、スペクトル内の正の実部がより大きい他の固有値がある場合)でもそれらを見つけられるようにしたいです。ただし、すべての固有値が対象の固有値以外の実部<0である問題に対して機能させることができれば幸いです。

現時点では、scipy linalg.eigおよびsparse.eigs関数を使用しています。私の知る限り、これらはそれぞれLAPACKとARPACKを使用して重い作業を行います。私は、SLEPcライブラリを使用することで、より良いパフォーマンスを達成できるかどうかを確認することにしました。これが悪い決定であるならば、私に知らせてください!

SLEPc固有値ソルバーでPETScを使用したいと思います。私は、チュートリアルの一部として提供されている例を使用してSLEPcを試しました。演習7(http://www.grycap.upv.es/slepc/handson/handson3.html)は、ファイルから行列AおよびBを読み取り、解を出力します。提供されたマトリックスを使用してこれを正常に動作させました。ただし、問題の小さいサイズのテストバージョン(6000x6000)に置き換えると、指定したコマンドライン引数に応じてさまざまなエラーが発生します。

私が抱えている主な問題は、「LU分解のピボットがゼロ」というエラーです。デフォルト設定を使用する場合。

これは、Bにゼロの行が含まれているという事実に関連していると思いますが、線形代数の私の理解はやや基本的です。これは本当ですか?

petscのWebサイトで提案されているオプション、-pc_factor_shift_type NONZEROなどを設定しようとしましたが、これらのオプションが使用されなかったという追加の警告が表示されます

これは前提条件の問題であると想定したので、-eps_targetを0.1に設定し、-st_type sinvertとshiftを指定した場合と指定しない場合の両方を試しました。それでも同じエラーが発生します。

次に、-st_pc_type jacobiとst_pc_type bjacobiを試しました。jacobiは実行されますが、固有値は生成されません。ブロックjacobiはLU分解を実行し、同じエラーを再度表示します。

デフォルトの方法はkrylov-schurなので、-eps_type gdおよび-eps_type jdオプションを使用して実験しました。残念ながら、これらはナンセンス固有値を生成するようですが、scipyでLAPACKを使用して解決すると、スペクトルにまったく表示されません。

私の行列の問題は特異ではないことを知っています。なぜなら、私はscipyを使用してそれを解くことができるからです。

これらすべての異なるソルバーの動作を理解するために、PETSCとSLEPCのマニュアル以外に読む必要がある本/ガイドを知っていますか?

コマンドラインオプションがない場合の出力を以下に示します。

私の最初の投稿を読んでいただきありがとうございます。

よろしく、トビー

SLEPcからのターミナル出力

tobymac:SLEPC toby $ mpiexec ./ex7 -f1 LHS-N7-M40-Re0.0-b0.1-Wi5.0-amp0.02.petsc -f2 RHS-N7-M40-Re0.0-b0.1- Wi5.0-amp0.02.petsc -eps_view

ファイルに保存されている一般化された固有問題。

[0] PETSC ERROR:---------------------エラーメッセージ--------------------- --------------- [0] PETSCエラー:LU分解でゼロピボットが検出されました:http ://www.mcs.anl.gov/petsc/documentation/faq.html#ZeroPivotを参照してください![0] PETSCエラー:行列の空の行:元の順序の行2395が順列順序3600になっています [0] PETSCエラー:-------------------------------------------- ---------------------------- [0] PETSCエラー:Petscリリースバージョン3.3.0、パッチ5、土12月1日15:10 :41 CST 2012 [0] PETSCエラー:最近の更新については、docs / changes / index.htmlをご覧ください。[0] PETSC ERROR:トラブルシューティングのヒントについては、docs / faq.htmlをご覧ください。[0] PETSCエラー:マニュアルページについては、docs / index.htmlをご覧ください。[0] PETSCエラー:-------------------------------------------- ---------------------------- [0] PETSCエラー:tobymacという名前のアーチダーウでのtoby Thu Jul 25 10による./ex7 :20:40 2013 [0] PETSCエラー:/ opt / local / libからリンクされたライブラリ[0] PETSCエラー:2013年7月23日火曜日15:11:27に実行を構成[0] PETSCエラー:

[0] PETSCエラー:/opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/interface/precon.c [0] PETSCのPCSetUp()行832エラー:/opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/interface/itfunc.c [0] PETSCエラーのKSPSetUp()行278がPCSetUp_Redundant( )/opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/impls/redundant/redundant.c [0] PETSCエラー:PCSetUp()行の176行目/opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/interface/precon.cの832 [0] PETSCエラー:/ optのKSPSetUp()行278 /local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/interface/itfunc。c [0] PETSCエラー:src / st / impls / shift / shift.cのSTSetUp_Shift()行94 c [0] PETSCエラー:src / st / interface / stsolve.cのSTSetUp()行280 [0] PETSCエラー:src / eps / interface / setup.cのEPSSetUp()行204 [0] PETSCエラー:src / eps / interface / solve.cのEPSSolve()行109 tobymac:SLEPC toby $


すべて0の行が少し意味することについて考えてください。方程式を書き出して、役立つかどうかを判断します。:)
meawoppl 2014

同様の問題があります。しかし、あなたは./ex7 -st_type sinvertを試してみましたか..それはうまくいきます。しかし、正しい固有ベクトルを取得していませんが、mは固有値を取得しています。あなたは何とか問題を解決できましたか?
han17 2014年

回答:


1

この形式の問題では、通常、が非特異である、つまり可逆である必要があります。あなたはがどこから来たのかを言わないので、私はあなたのについて何も知りませんが、それが特異でないことを確認する必要があります。BA,BB


回答をありがとう、Aは粘弾性平面クエット流の線形安定性解析方程式の2Dスペクトル分解から得られます。行の最初の40%のBはゼロで、その後、対角線上に1.0があります。だから私は私のBが特異であることを推測します。これは問題を解決不可能にしますか?これが真実である場合、scipyがどのようにそのような説得力のある結果を与えているかについて、私は混乱しています。
Toby Searle 2013

私はscipyがやっていると信じていますが、これは大丈夫でしょうか?A1Bx=λ1x
Toby Searle 2013

が特異であると仮定すると、そのカーネルにはベクトルが存在するため、。つまり、これらは、定義の問題を明確に示す対応する固有ベクトルです。元の問題の一般化された固有値の。したがって、通常はが非特異であることが望まれます。BxA1Bx=0λ1=0B
Wolfgang Bangerth 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.