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

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

17
Python用の高品質な非線形プログラミングソルバーはありますか?
解決すべきいくつかの挑戦的な非凸のグローバル最適化問題があります。現在、MATLABのOptimization Toolbox(特にfmincon()algorithm ='sqp'を使用)を使用していますが、これは非常に効果的です。ただし、私のコードのほとんどはPythonで作成されているため、Pythonでも最適化を行いたいと考えています。競合できるPythonバインディングを備えたNLPソルバーはありfmincon()ますか?ちがいない 非線形等式および不等式の制約を処理できる ユーザーがヤコビアンを提供する必要はありません。 グローバルな最適化を保証していなくても構いません(保証fmincon()しません)。私は、困難な問題や、それよりもわずかに遅い場合でも、ローカル最適にロバストに収束するものを探していfmincon()ます。 OpenOptで利用できるソルバーをいくつか試しましたが、MATLABのソルバーより劣っていfmincon/sqpます。 強調するために、私はすでに扱いやすい定式化と優れたソルバーを持っています。私の目標は、ワークフローをより合理化するために、単に言語を変更することです。 Geoffは、問題のいくつかの特性が関連している可能性があると指摘しています。彼らです: 10-400の決定変数 4〜100の多項式等式制約(1〜8の範囲の多項式次数) 決定変数の数の約2倍に等しい合理的な不等式制約の数 目的関数は決定変数の1つです 不等式制約のヤコビアンと同様に、等式制約のヤコビアンは密です。

4
スパース線形システムソルバーを選択する場合、どのガイドラインに従う必要がありますか?
スパース線形システムは、アプリケーションの頻度が高くなるにつれて現れます。これらのシステムを解決するために選択する多くのルーチンがあります。最高レベルでは、直接法(特殊な順序付けアルゴリズムを使用したスパースガウス消去法またはコレスキー分解法、マルチフロント法など)と反復法(GMRES、(双)共役勾配法)の間に分岐点があります。 直接法を使用するか反復法を使用するかをどのように決定しますか?その選択をした後、特定のアルゴリズムをどのように選ぶのでしょうか?対称性の活用についてはすでに知っています(たとえば、スパース対称正定値システムに共役勾配を使用します)が、メソッドを選択する際に考慮すべきこのような他の考慮事項はありますか?

7
一般的な行列の最大固有値を計算する最速の方法は何ですか?
編集:固有値の大きさが1以上であるかどうかをテストしています。 大きなスパースな非対称行列の最大の絶対固有値を見つける必要があります。 eigen()EISPACKまたはLAPACKのQRアルゴを使用してすべての固有値を検索し、次にabs()絶対値を取得するために使用するRの関数を使用しています。しかし、私はそれをより速くする必要があります。 また、igraphRパッケージのARPACKインターフェイスを使用してみました。しかし、私の行列の1つでエラーが発生しました。 最終的な実装はRからアクセス可能でなければなりません。 おそらく同じ大きさの複数の固有値があるでしょう。 何か提案はありますか? 編集: 精度はする必要があるだけ1e-11です。「典型的な」行列はこれまででした。QR分解を行うことができました。ただし、より大きなものを使用することもできます。現在、Arnoldiアルゴリズムについて読み始めています。Lanczsosに関連していることを理解しています。386 × 386386×386386\times 386 EDIT2:「テスト」している複数のマトリックスがあり、変化しない大きなサブマトリックスがあることがわかっている場合。無視/破棄することは可能ですか?

3
解く
行列とます。はスパースで、で非常に大きい(数百万程度)は高さの行列で、はかなり小さく()、各列はように、残りがである単一のエントリのみがあります。は巨大なので、反転するのは本当に、などのクリロフ部分空間法を使用して、などの線形システムを繰り返し解くことができますが、AAAGGGAAAn×nn×nn\times nnnnGGGn×mn×mn\times mmmm1<m<10001<m<10001 \lt m \lt 1000111000GTG=IGTG=IG^TG = IAAAAx=bAx=bAx = bBiCGStab(l)BiCGStab(l)\mathrm{BiCGStab}(l)A−1A−1A^{-1} explicitly. I want to solve a system of the form: (GTA−1G)x=b(GTA−1G)x=b(G^TA^{-1}G)x = b, where xxx and bbb are mmm length vectors. One way to do it is to use an iterative algorithm within an iterative algorithm to solve for ...

5
優れたソフトウェア設計で20%のパフォーマンスペナルティ
オブジェクト指向プログラミングを最大限に活用する方法を習得する方法として、スパース行列計算用の小さなライブラリを作成しています。パーツ(疎行列と、それらの接続構造を記述するグラフ)が非常に緩やかに結合されている素晴らしいオブジェクトモデルを作成するために、私は一生懸命取り組んできました。私自身の見解では、コードははるかに拡張性があり、保守が容易です。 ただし、鈍いアプローチを使用した場合よりも多少遅くなります。このオブジェクトモデルを使用することのトレードオフをテストするために、基になるグラフのカプセル化を破る新しいスパースマトリックスタイプを作成して、実行速度を確認しました。 最初は、かなり暗いように見えました。私がかつて誇りに思っていたコードは、洗練されたソフトウェア設計のないバージョンよりも60%遅くなりました。しかし、APIをまったく変更せずに、関数をインライン化し、ループを少し変更するという、いくつかの低レベルの最適化を行うことができました。これらの変更により、競合よりもわずか20%遅くなりました。 それは私の質問に私をもたらします:それが私が素晴らしいオブジェクトモデルを持っていることを意味する場合、どのくらいのパフォーマンス損失を受け入れるべきですか?

5
スパース行列乗算で非ゼロの数を決定する最良の方法は何ですか?
両方の行列がCSCまたはCSR形式であると仮定して、スパース行列の乗算演算で事前に非ゼロの数を見つけるための高速で効率的な方法があるかどうか疑問に思いました。 smmpパッケージにあるものは知っていますが、CまたはC ++で既に実装されているものが必要です。 任意の助けをいただければ幸いです。前もって感謝します。

3

4
変数を並べ替えて最小帯域幅のバンド行列を生成する方法は?
私は有限差分によって2Dポアソン方程式を解こうとしています。このプロセスでは、各方程式に変数がしかないスパース行列を取得します。たとえば、変数が場合、離散化の結果は次のようになります。555UUU うんi−1,j+Ui+1,j−4Ui,j+Ui,j−1+Ui,j+1=fi,jUi−1,j+Ui+1,j−4Ui,j+Ui,j−1+Ui,j+1=fi,jU_{i-1,j} + U_{i+1,j} -4U_{i,j} + U_{i,j-1} + U_{i,j+1} = f_{i,j} 私はこのシステムを反復法で解くことができることを知っていますが、変数を適切に順序付ければ、直接法(すなわち、ガウス消去法w / oピボット)。これは可能ですか?他の、おそらく構造化されていないスパースシステムでこれを行うための戦略はありますか?

1
SciPy eigsh()が高調波発振器の場合に誤った固有値を生成するのはなぜですか?
私は、計算物理学の文脈で、巨大なスパース行列の固有値計算を実行するために、いくつかのより大きなコードを開発しています。固有値は分析的によく知られているため、1次元の単純な調和振動子に対してルーチンをテストします。そのようにして、自分のルーチンをSciPyの組み込みソルバーと比較すると、下のプロットに表示される奇妙なことに出くわしました。ここでは、数値計算された最初の100個の固有値および分析固有値を見ることができますλN U Mλnあなたはm\lambda_{num}λn個のAλana\lambda_{ana} 固有値番号40付近で、数値結果は分析結果から分岐し始めます。これは私を驚かせるものではありません(議論で取り上げられない限り、ここではなぜなのかを説明しません)。しかし、私にとって驚くべきことは、eigsh()が縮退した固有値(固有値80あたり)を生成することです。なぜeigsh()は、そのような少数の固有値に対してもそのように振る舞いますか? import numpy as np from scipy.sparse.linalg import eigsh import myFunctions as myFunc import matplotlib.pyplot as plt #discretize x-axis N = 100 xmin = -10. xmax = 10. accuracy = 1e-5 #stepsize h = (xmax - xmin) / (N + 1.) #exclude first and last points since ...

2
非常に大きくて非常に疎な隣接行列のすべての固有値を計算する
それぞれ約n〜100000個のノードを持つ2つのグラフがあります。両方のグラフで、各ノードはちょうど3つの他のノードに接続されているため、隣接行列は対称で非常にまばらです。 難しい部分は、隣接行列のすべての固有値が必要ですが、固有ベクトルは必要ないことです。正確に言うと、これは私の生涯に1回(少なくとも私が見る限りでは!)になるので、すべての固有値を取得したいのですが、それらを取得するのに数日待つことは気にしません。 scipyラッパーを試してみましたARPACKが、時間がかかりすぎます。複数のライブラリを見つけましたが、最大/最小の固有値のサブセットを取得するのに最適です。すべての固有値を取得するために、おそらく並列実装で対称スパース行列に機能するライブラリはありますか?

3
Thomasアルゴリズムは、対称対角優勢なスパース三重対角線形システムを解くための最速の方法ですか
Thomasアルゴリズムが、アルゴリズムの複雑さの観点から対称対角線上にあるスパース三重対角システムを解決するための最速の方法(おそらく?)かどうか疑問に思っています(LAPACKなどの実装パッケージを探していません)。トーマスアルゴリズムとマルチグリッドの両方が複雑さであることは知っていますが、マルチグリッドの定数因子はそれよりも少ないのでしょうか?マルチグリッドの方が速いように思えませんが、私は前向きではありません。O(n )O(n)O(n) 注:マトリックスが非常に大きい場合を考えています。直接的な方法または反復的な方法のどちらでもかまいません。

3
多くの右側のスパース線形ソルバー
多くの右側(300から1000)で同じ疎な線形システム(300x300から1000x1000)を解く必要があります。この最初の問題に加えて、さまざまなシステムを解決したいと思いますが、同じ非ゼロ要素(値が異なる)で、スパースパターンが一定の多くのスパースシステムです。私の行列は不定です。 因数分解と初期化のパフォーマンスは重要ではありませんが、解決段階のパフォーマンスは重要です。現在、私はPaStiXまたはUmfpackを検討しています。おそらく、両方のソルバーをサポートするPetscをいじります多分私のニーズに合わせて少し変更しますか? スパース行列がまでの場合はどうなりますか?106×106106×10610^6 \times 10^6



4
quad-double算術スパースマトリックスパッケージはありますか?
私はいくつかの悪条件の大規模なスパース線形方程式系に取り組んでいます。それらを解決するために、ダブルダブル算術またはクワッドダブル算術を使用したいと思います。中田真帆が開発したMPACKという名前のパッケージがあり、4倍算術で数値線形代数計算を実行できることを知っています。ただし、スパースマトリックスではなく、デンスマトリックス用に設計されています。quad-double算術スパースマトリックスパッケージがあるかどうかを知っていますか?

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