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

2
numpyの行列反転の複雑さ
密な正方行列を反転する必要がある微分方程式を解いています。この行列の反転は計算時間のほとんどを消費するため、利用可能な最速のアルゴリズムを使用しているかどうか疑問に思っていました。 私の現在の選択はnumpy.linalg.invです。数値から、でスケーリングされることがわかります。ここで、nは行数であるため、方法はガウス消去法のようです。O(n3)O(n3)O(n^3) ウィキペディアによると、利用可能なより高速なアルゴリズムがあります。これらを実装するライブラリがあるかどうか誰もが知っていますか? なぜこれらの高速アルゴリズムをnumpyが使用しないのでしょうか?

1
巨大な高密度線形システムを解く?
次の線形システムを反復法で効率的に解くことに希望はありますか? A∈Rn×n,x∈Rn,b∈Rn, with n>106A∈Rn×n,x∈Rn,b∈Rn, with n>106A \in \mathbb{R}^{n \times n}, x \in \mathbb{R}^n, b \in \mathbb{R}^n \text{, with } n > 10^6 Ax=bAx=bAx=b と Δ - 6 6 1A=(Δ−K)A=(Δ−K) A=(\Delta - K) 、ここでは、ラプラス演算子の離散化から生じる、いくつかの対角線を持つ非常に疎な行列です。メインの対角線にはがあり、他のつの対角線にはがあります。ΔΔ\Delta−6−6-6666111 R n × nKKKは、完全に1 で構成される完全な行列です。Rn×nRn×n\mathbb{R}^{n \times n} 解くと、ガウスザイデルのような反復法で問題なく動作します。これは、スパースの斜めに支配的な行列だからです。問題は、多数の効率的に解決することはほとんど不可能であると思われますが、の構造を利用して、おそらくそれを解決するためのトリックはありますか?A=ΔA=ΔA=\DeltaA=(Δ−K)A=(Δ−K)A=(\Delta - K)nnnKKK 編集:のような何かをするだろう Δxk+1=b+KxkΔxk+1=b+Kxk\Delta x^{k+1} = b + Kx^{k} …

2
ハミルトニアン行列の行列指数
レッツ本当、正方形、密行列も。とは対称です。しましょうA,G,QA,G,QA, G, QGGGQQQ H=[A−Q−G−AT]H=[A−G−Q−AT]H = \begin{bmatrix} A & -G \\ -Q &-A^T \end{bmatrix} ハミルトニアン行列である。の行列指数を計算したい。行列とベクトルの積だけでなく、完全な行列指数が必要です。ハミルトニアン行列の指数を計算するために利用できる特別なアルゴリズムまたはライブラリはありますか?HHHetHetHe^{tH}

2
密で不良な条件付き行列の対角化
いくつかの密で悪条件の行列を対角化しようとしています。マシン精度では、結果は不正確です(負の固有値を返す、固有ベクトルには期待される対称性がありません)。MathematicaのEigensystem []関数に切り替えて、任意の精度を利用しましたが、計算が非常に遅くなっています。私はいくつもの解決策を受け入れます。悪条件の問題に適したパッケージ/アルゴリズムはありますか?私はプレコンディショニングの専門家ではないので、これがどれだけ役立つかわかりません。それ以外の場合は、並列化された任意精度の固有値ソルバーしか考えられませんが、Mathematica、MATLAB、およびC ++以外には何も知りません。 問題の背景を説明するために、行列は大きくはありますが、巨大ではありません(最大で4096x4096〜32768x32768)。それらは実数で対称であり、固有値は0から1(排他的)の範囲にあり、多くの固有値は0に非常に近く、1に近いものはありません。行列は本質的に畳み込み演算子です。すべての行列を対角化する必要はありませんが、大きくできるほど良いです。多くのプロセッサと分散コンピューティング機能を備えたコンピューティングクラスタにアクセスできます。 ありがとうございました

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

6
Armadilloによる行列乗算のSuper C ++最適化
私はArmadilloを使用して、辺の長さが非常に集中的な行列乗算を行っています。ここで、は最大20以上にすることができます。私が使用しているアルマジロをしてOpenBLAS私は、パフォーマンスの最適化のためのスーパーアルマジロでの乗算の形式主義に問題があることを除いて、並列コアで非常に良い仕事をしているように見える行列乗算、ため。 n2ん2ん2^nんんn 次の形式のループがあるとします。 arma::cx_mat stateMatrix, evolutionMatrix; //armadillo complex matrix type for(double t = t0; t < t1; t += 1/sampleRate) { ... stateMatrix = evolutionMatrix*stateMatrix; ... } 基本的なC ++では、私はここでの問題を見つけることはC ++での新しいオブジェクトに割り当てるということであるcx_mat店にしevolutionMatrix*stateMatrix、その後に新しいオブジェクトをコピーstateMatrixしてoperator=()。これは非常に非効率的です。大きなデータ型の複雑なクラスを返すのは悪い考えだということはよく知られていますよね? この方法がより効率的であると私が考える方法は、次の形式で乗算を行う関数を使用することです。 void multiply(const cx_mat& mat1, const cx_mat& mat2, cx_mat& output) { ... //multiplication of mat1 and mat2 and then store …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.