タグ付けされた質問 「sparse-matrix」

ストレージ、アセンブリ、操作、および非ゼロ要素のみが保存されるスパース行列の処理に関するその他の側面に関する質問。スパース行列を直接使用しないが、スパース性を使用する他の方法の質問には、[sparse-operator]でタグ付けする必要があります。


3
スパース行列乗算のオーバーヘッドは何ですか
行列の乗算(Mat * MatとMat * Vecの両方)は、0以外の数、または行列のサイズでスケーリングされますか?または、2つの組み合わせ。 形状についてはどうでしょう。 たとえば、100個の値を含む100 x 100のマトリックス、または100個の値を含む1000 x 1000のマトリックスがあります。 これらの行列を2乗する(または、同様のスパース性を持つ同様の行列を掛ける)と、最初の(100x100)は2番目の(1000x1000)よりも速くなりますか?値がどこにあるかに依存しますか? 実装に依存している場合は、PETScの回答に興味があります。

5
大規模なスパース対称(正定ではない)システムのソルバーの最良の選択
私は現在、いくつかの特定のアルゴリズムによって生成された非常に大規模な対称(ただし、正定値ではない)システムの解決に取り組んでいます。これらの行列には、並列解法に使用できる素晴らしいブロックスパース性があります。しかし、直接アプローチ(Multi-frontalなど)と反復アプローチ(前処理されたGMRESまたはMINRES)のどちらを使用するべきかを判断できません。私のすべての研究は、反復ソルバー(7つの内部反復のかなり高速な収束でさえ)が、MATLABの直接の '\'演算子に勝てないことを示しています。しかし、理論的には、直接法の方がコストがかかると考えられています。これはどうですか?そのような場合の最新の文書や紙はありますか?GMRESのような柔軟な反復ソルバーと同じくらい効率的な直接法を使用して、並列システムでブロックスパース性を使用できますか?

2
グローバルスパース有限要素スティフネスマトリックスでディリクレ境界条件を効率的に実装する方法
グローバルスパース有限要素行列のディリクレ境界条件が実際に効率的に実装される方法を知りたいです。たとえば、グローバルな有限要素行列が次のとおりだったとします K= ⎡⎣⎢⎢⎢⎢⎢⎢520− 102410001632− 1037000203⎤⎦⎥⎥⎥⎥⎥⎥と右側のベクトルb = ⎡⎣⎢⎢⎢⎢⎢⎢b 1b 2b 3b 4b 5⎤⎦⎥⎥⎥⎥⎥⎥K=[520−102410001632−1037000203]と右側のベクトルb=[b1b2b3b4b5]K = \begin{bmatrix} 5 & 2 & 0 & -1 & 0 \\ 2 & 4 & 1 & 0 & 0 \\ 0 & 1 & 6 & 3 & 2 \\ -1 & 0 & 3 & …

2
適応FEMで使用される新しいデータ構造はどれですか?
適応FEMライブラリの多くは、たとえばなどのノード、エッジ、三角形、四面体を、追加/削除処理するために、より高度なメッシュデータ構造を使用し、p4estライブラリの使用は、解適合格子法のためのデータ構造をオクトリ。静的メッシュでの計算に使用されるオクツリーはあまりありません。 適応FEMの線形代数側で何が変わりますか? 私が考えることができる最も率直な方法は、メッシュが洗練または粗くされるときはいつでも、すべてのシステム行列を完全に再構築することです。メッシュ適応が十分に頻度の低い操作である場合、そのための費用は最終的に残りの計算に渡って償却されます。このアプローチでは、既存のスパース線形代数ソフトウェア(PETSc、Trilinosなど)を簡単に活用できます。 この鈍い方法が最も一般的に使用されていますか、それとも洗練中に古いマトリックスを再利用または変更するためのライブラリがありますか?結局のところ、メッシュと対応する行列のほとんどは、メッシュの適応中に変更されません。

3
希薄で非常に悪条件なシステムの解決
私はAx = bを解こうとしています。ここで、Aは複雑で、スパースで、非対称で、非常に悪条件(条件番号〜1E + 20)の正方形または長方形の行列です。LAPACKのZGELSSでシステムを正確に解くことができました。しかし、私のシステムの自由度が高くなると、スパース性が活用されないため、ZGELSSを使用してPCでシステムを解くのに長い時間がかかります。最近、同じシステムでSuperLU(Harwell-Boeingストレージを使用)を試しましたが、条件番号> 1E + 12で結果が不正確でした(これがピボットの数値的な問題かどうかはわかりません)。 すでに開発されたソルバーを使用する傾向があります。私が言及したシステムをすばやく(つまり、スパース性を活用して)確実に(条件数を考慮して)解決できる堅牢なソルバーはありますか?

1
小さなランクの対角更新でシステムを解く
元の大規模でスパースな線形システムます。今、Aは因数分解やAのあらゆる分解に対応するには大きすぎるため、A − 1はありませんが、反復解法で解x 0が見つかったと仮定します。A x0= b0Ax0=b0A\textbf{x}_0=\textbf{b}_0あ− 1A−1A^{-1}あAAバツ0x0\textbf{x}_0 ここで、Iは、(対角エントリの数を変更する)Aの対角に小さなランク更新を適用したい: Dは、その対角線と数にほとんど0の対角行列でありますゼロ以外の値。もし私がA − 1を持っていれば、ウッドベリーの公式を利用して更新を逆に適用することができます。ただし、これは利用できません。システム全体をもう一度解決する以外にできることはありますか?私は、前提条件を考え出すことができるかもしれないといういくつかの方法があるM反転が容易\簡単であるように、M A 1 ≈(A + D )x1= b0(A+D)x1=b0(A+D)\textbf{x}_1=\textbf{b}_0DDDA−1A−1A^{-1}MMM、つまり x 0の場合に適用する必要があるのは M - 1を適用することだけであり、反復法は数回/数回の反復で収束しますか?MA1≈A0MA1≈A0MA_1 \approx A_0x0x0\textbf{x}_0M−1M−1M^{-1}

3
実スパース行列の特性多項式の計算
一般的なスパース行列所与とM << N(訂正:M « N 2)非ゼロ要素(典型的には、mは∈ O(N ))。Aは特定のプロパティ(例:正定性)を持たず、構造(例:縞模様)がないと見なされるという意味で一般的です。A∈Rn×nA∈Rn×nA \in \mathbb{R}^{n\times n}m≪n2m≪n2m \ll n^2m∈O(n)m∈O(n)m \in {\cal O}(n)AAA Aの特性多項式または最小多項式のいずれかを計算するための優れた数値手法のいくつかは何ですか?AAA

3
スパースマトリックスストレージとデンスマトリックスストレージの経験則
マトリックスの予想されるスパース性(つまり、非ゼロの数/非ゼロの可能な合計数)がわかっているとします。スパースマトリックスストレージ(具体的には、圧縮された行ストレージ)を使用するか、高密度マトリックスとして保存するかを決定するための経験則(おそらくおおよそ)はありますか? 私のアプリケーションでは、メモリよりも速度が重要です。しかし、一般的な好奇心から、スピードとメモリの両方の観点からの回答に興味があります。 行列を生成した後は、加算と乗算の演算のみを適用します。 私は定性的な答えしか見つけることができませんでした。たとえば、この質問とこの質問ですが、次のようなものを探しています ...スパース性が約超える場合は、高密度ストレージを使用します。x%x%x\%

1
科学計算におけるデータ構造のビットパッキングと圧縮
私は最近、この論文に出くわしました。この論文では、疎行列を表す際にメモリを節約する方法について説明しています。32ビット整数は、最大40億までの数値を格納できます。しかし、PDEを解くと、未知数の数が40億に近づくずっと前に、問題が並列化されて分割されました。彼らのアイデアは、帯域幅が狭い場合にマトリックスを並べ替えることです。j特定の行にすべてのゼロ以外の列のインデックスを格納するのではなく、並べ替えによって大きさが小さくなる傾向があるiオフセットを格納j - iします。オフセットは、32ビット整数よりも少ないビット数で保存できます。行列のゼロ以外のエントリを反復処理する場合は、より多くの計算を行う必要がありますが、キャッシュミスを少なくすることによる節約は、それを補う以上のミスをもたらします。では、この論文彼らは特に階層マトリックス形式で16ビットインデックスを使用することを検討していましたが、最終的には同様のアイデアです。ライブラリzfpもあります。これは、浮動小数点データを圧縮するためのものです。 現在「フロップは無料」であり、ボトルネックはメモリアクセスであるため、この種のトリックはCPUキャッシュをより有効に活用するために非常に有望であるように見えます。 私はこれら2つの論文の引用/引用のほとんどを精査しました。私は、ビットパッキングの有効性、スパース行列ベクトルの乗算、および計算科学の他の問題について、他の参考資料を探しています。たとえば、このアイデアを使用して、グラフや非構造化メッシュのデータ構造をはるかに効率的に設計できると思います。

2
与えられたベクトルの固有ベクトル成分を計算する
エルミートスパース演算子Mの固有空間に分解できるベクトルVVVあります。MMM V=∑ivim^iV=∑ivim^iV = \sum_i v_i \hat{m}_i 最大の(大きさ)に対応する(固有ベクトル自体)を見つける方法はありますか?m^im^i\hat{m}_iviviv_i 基本的に、事前にわからないの固有ベクトルを含む、合計の最大の数項が必要です。MMM 具体的には、最大の対応するの固有ベクトルを同時に見つけたい 、最大のを見つける。最初にスペクトル全体を見つけることはできません。MMM|vi||vi||v_i|viviv_iMMM 私が考えていたいくつかの可能性: 「Wieldant's Deflation」の反対を使用して、マトリックスを「膨張」させることができます。 M1=M+σ[Σivim^i]VH=M+σVVHM1=M+σ[Σivim^i]VH=M+σVVHM_1 = M + \sigma \left[ \Sigma_i v_i \hat{m}_i \right] V^H = M + \sigma V V^H 異なるの固有値は、シフトされます。固有ベクトルは変化しないため、と抽出できると思います。問題は、外積が密であることです。m^im^i\hat{m}_iλi+σ|vi|2λi+σ|vi|2\lambda_i + \sigma |v_i|^2σσ\sigmaviviv_iVVV 別の可能性: べき乗法(収束までにベクトル掛け続ける)は、最大の固有値を持つの成分を見つけます。この方法の欠点は、の大きさを制御できないため、すべてのコンポーネントを見つけ、最大のものを見つけることです。MMMVVVVVVviviv_i 最大のコンポーネントのみに収束するようにこれを制御する方法はありますか?


4
カルマンフィルターのスパース行列の実装?
カルマンフィルターベースのモデリングコードを使用して、ほぼリアルタイムの地域電離層マッピングアプリケーション用に開発しました。このコードは、カルマンフィルターを使用して、さまざまなセンサーからのデータを(基本関数のセットで記述された)マップに同化します。 私はこれをより大きな領域とより多くのセンサーに拡大しようとしていますが、カルマンフィルターの行列代数部分は、関与する大きな行列(数千の行/列)のために非常に遅くなります。ランタイムの問題を攻撃する最善の方法は、これらの行列が通常、総要素の80%以上が非常にスパースであるという事実を使用することだと思います。これは、各センサーにマップ係数と一緒に推定されるバイアスパラメーターがあるためです。これは、カルマンHマトリックスのそのセンサーの列に1として表示され、他のすべてのセンサーおよびマップ係数の列には0が表示されます。数百のセンサーがあり、それぞれが各エポックで8〜10の観測値を提供しているため、多くのゼロがあります。 スパースアルゴリズム、特に乗算と反転*を使用してカルマンフィルターのコンポーネントを実装することを検討することもできますが、マトリックスがまばら?アンサンブルカルマンフィルターなどを使用できることはわかっていますが、可能であれば、純粋な線形カルマンフィルターの最適性を維持したいと思います。総データ量は禁止されていません。線形モデルから生じる大きなスパース行列だけです。 実装に関しては、これはIDLで行われますが、コア行列代数は、外部の最適化されたLAライブラリ(具体的にはATLAS)の呼び出しを介して行われます。 *最適なカルマンフィルターの実装では反転が回避され、代わりにUD分解が使用されます。私はこのようなものを実装することを検討しているので、それが答えになるかもしれませんが、マトリックスのスパース性を考慮してより良い解決策があるかどうかを探しています。

1
疎な複雑な行列をコードからPETScに効率的に取得する方法
FortranコードからPETScに複雑なスパース行列を取得する最も効率的な方法は何ですか?これは問題に依存することを理解しているので、以下に関連する詳細をできるだけ多く記載するようにしました。 私は一緒に遊んでてきたFEAST固有値ソルバー[1]タイプの問題のためのの次元は行列AとBがあるN、およびほとんどすべての時間が解決費やされているN × N複素線形をM0右側のシステム。Nは大きく(3DでのFE基底関数の数)、M0は小さい(私の場合はM0〜20に興味がある)。行列AとBは実対称でスパースであり、解を必要とする複雑な問題はz A − Bであり、ここでzA X = λ B Xあバツ=λBバツA x = \lambda B xああABBBNNNN× NN×NN \times NああABBBzA − Bzあ−BzA-Bzzzは複素数です。FEASTの作成者は、この正確な固有値と固有ベクトルを取得するために、この線形システムの解の精度をそれほど高くする必要がないことを示唆しているようです。そのため、いくつかの高速反復ソルバーは、これに対する優れたソリューションとなる可能性があります。 これまでのところ、複雑なシステムにLapackを使用してきましたが、これは私のコンピューターでにうまく機能します。Nが大きい場合、最適なソルバーがまだわからないので、PETScを使用して、そこで反復ソルバーを試してみたかったのです。N&lt; 1500N&lt;1500N < 1500NNN 私は単純なCドライバーを作成し、それをFortranから呼び出しました。すべてのコードについては[2]を参照してください。問題はこの部分にあります(更新:マトリックスを作成するためにすべての行をここに配置しました。これが関連していること): ierr = MatCreate(PETSC_COMM_WORLD,&amp;A);CHKERRQ(ierr); ierr = MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr); ierr = MatSetFromOptions(A);CHKERRQ(ierr); ierr = MatSetOption(A,MAT_IGNORE_ZERO_ENTRIES,PETSC_TRUE);CHKERRQ(ierr); ierr = MatSetUp(A);CHKERRQ(ierr); for (i=0; i&lt;n; i++) col[i] = i; ierr …

2
ILUプレコンディショナーの分類
スパース線形システムのBiCGStabソルバーの場合、前提条件子を使用する必要がほとんど常にあることを学びました。良いものを選ぶことは問題に依存していることを今までに気づきました。 Webをサーフィンしているときに、ILUベースのプレコンディショナー(ILUT、MILUなど)がたくさんあることがわかりました。ここで混乱しました。 誰かがILUプレコンディショナーの分類法を簡単に説明でき、特定のもののいくつかの文献ソースを提供でき、それらのうちのどれがBiCGStabに適しているのか疑問に思いました。 私が作業している設定はCFDであり、コードは非構造化有限ボリュームの離散化に基づいています。乱流スカラーの運動量方程式と輸送方程式には、おそらく異なる前処理が必要になります。

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