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

行列は、列と行に配置された要素(eq番号、シンボル、または式)の長方形配列です。

5
有限要素行列のスパース構造の計算
質問:有限要素行列のスパース構造を正確かつ効率的に計算するには、どのような方法が利用できますか? 情報:私はポアソン圧力方程式ソルバーに取り組んでおり、Cで記述された2次ラグランジュ基底を使用したGalerkinの方法を使用し、スパースマトリックスストレージとKSPルーチンにPETScを使用しています。PETScを効率的に使用するには、グローバル剛性マトリックスにメモリを事前に割り当てる必要があります。 現在、私は次のように行ごとの非ゼロの数を推定するために模擬アセンブリを行っています(擬似コード) int nnz[global_dim] for E=1 to NUM_ELTS for i=1 to 6 gi = global index of i if node gi is free for j=1 to 6 gj = global index of j if node gj is free nnz[i]++ ただし、ノード間相互作用が複数の要素で発生する可能性があるため、これはnnzを過大評価しています。 どのi、jインタラクションが見つかったかを追跡しようと考えましたが、多くのメモリを使用せずにこれを行う方法はわかりません。ノードをループして、そのノードを中心とした基底関数のサポートを見つけることもできますが、各ノードのすべての要素を検索する必要があり、非効率的です。 私が見つかりました。これは特に書いたステファノM、から、いくつかの有用な情報が含まれて最近の質問を、 私のアドバイスは、それをpythonまたはCで実装し、いくつかのグラフ理論概念を適用することです。つまり、マトリックスの要素をグラフのエッジと見なし、隣接マトリックスのスパース構造を計算します。キーのリストまたは辞書のリストは一般的な選択肢です。 これに関する詳細とリソースを探しています。私は確かに多くのグラフ理論を知らず、役に立つかもしれないすべてのCSトリックに精通していません(数学的な側面からこれに近づいています)。 ありがとう!

3
単精度と倍精度の浮動小数点精度
単精度の浮動小数点数はメモリの半分を占有し、最新のマシン(GPUの場合でも)では、倍精度に比べてほぼ2倍の速度で操作を実行できます。私が見つけた多くのFDTDコードは、単精度の算術演算とストレージのみを使用しています。大規模なスパース方程式を解くために単精度を使用することが許容される場合の経験則はありますか?マトリックス条件数に大きく依存する必要があると思います。 さらに、必要に応じて倍精度を使用し、倍精度を必要としない単一精度を使用する効果的な手法はありますか。たとえば、行列ベクトル乗算またはベクトルドット積の場合、結果を倍精度変数に蓄積して(キャンセルエラーを回避する)ことをお勧めしますが、個々のエントリは互いに乗算する必要があります単精度を使用して乗算できます。 最新のFPUでは、単精度(浮動)から倍精度(倍)へ、またはその逆にシームレスに変換できますか?または、これらの費用のかかる操作ですか?

5
同じ、異なるを繰り返し解く
MATLABを使用して、が時間とともに変化するすべてのタイムステップでを解く問題を解決しています。現在、MATLABを使用してこれを実現しています:Ax=bAx=b\mathbf{A} \mathbf{x}=\mathbf{b}bb\mathbf{b}mldivide x = A\b 必要なだけ多くの事前計算を行う柔軟性があるので、より高速で正確な方法があるかどうか疑問に思っていmldivideます。ここで通常行われることは何ですか?皆さんありがとう!

1
大きなスパース整数行列のアルゴリズム
数値の安定性を犠牲にすることなく、大きなスパース行列で行列演算を実行するライブラリを探しています。行列は1000+ x 1000+になり、行列の値は0〜1000になります。インデックス計算アルゴリズムを実行するため、行列の(スパース)行ベクトルをシリアルに生成します。各行を開発するにつれて、線形独立性をテストする必要があります。必要な数の線形独立ベクトルでマトリックスを入力したら、マトリックスを縮小行エシェロン形式に変換する必要があります。 ここでの問題は、私の実装がガウス消去法を使用して線形独立性を決定することです(すべての行ベクトルが見つかったら、行の階層を確保します)。ただし、行列の密度とサイズを考えると、キャンセルを実行するには先頭のエントリのlcmを見つける必要があるため、新しい行のエントリは時間とともに指数関数的に大きくなります。行列の縮小形を見つけると、問題がさらに悪化します。 私の質問は、線形独立性をテストし、エントリを可能な限り小さく保ちながら行の階段型を解くことができるアルゴリズム、またはそれ以上の実装がありますか?線形独立性の効率的なテストは、インデックス計算アルゴリズムで最も多く実行されるため、特に重要です。

3
特異値分解のアルゴリズムに関する最新技術は何ですか?
私は可能な限りシンプルなパッケージである程度の線形代数機能を提供するためにヘッダーのみのマトリックスライブラリに取り組んでおり、現在の最先端が何であるかを調査しようとしています:SVDの計算複雑なマトリックス。 私は、2相分解、2重対角化とそれに続く特異値計算を行っています。今、私はbidiagonalization(私はLAPACKは同様にこれを使用すると信じて)、と私は考えるために世帯主の方法を使用していることについての、現在につれて良いとして(誰かがを知っているしない限り、そのためのアルゴリズム...) 。 O(N2)O(N2)\mathcal{O}(N^2) 特異値の計算は私のリストの次にあり、私はこれを行うための一般的なアルゴリズムが何であるかについてのループからやや外れています。ここで、研究は複雑性との直交性を保証する逆反復法に向かっていることを読みました。私はそれまたは他の進歩について聞いてみたいです。O(N)O(N)\mathcal{O}(N)

1
加重SVD問題?
2つの行列とBが与えられた場合、 min ∑ i j(A i j − x i y j B i j)2のようなベクトルxとyを見つけたいと思います。 行列形式では、Iは、のフロベニウスノルム最小化しようとしているA - DIAG(X )⋅ B ⋅ DIAG(Y )= A - B ∘ (XがYを⊤AAABBBバツxxyyy分∑私はj(A私はj− x私yjB私はj)2。min∑ij(Aij−xiyjBij)2. \min \sum_{ij} (A_{ij} - x_i y_j B_{ij})^2. 。- DIAG(X )⋅ B ⋅ DIAG(Y)= A - B ∘ (X 、Y⊤)A−diag(x)⋅B⋅diag(y)=A−B∘(xy⊤)A - \mbox{diag}(x) …

3
2つの12x12行列の行列式が同じかどうかのテスト
12×1212×1212 \times 12QQQJdet(Q)=det(12I−Q−J)(1)det(Q)=det(12I−Q−J)(1)\det(Q) = \det(12I-Q-J) \; \; (1)JJJ 現在、armadilloライブラリでこれを行っていますが、遅すぎることがわかりました。事は、私は何兆もの行列に対してこれを行う必要があるということであり、2つの行列式を計算することが私のプログラムのボトルネックであることがわかりました。したがって、2つの質問があります サイズを知っていれば、行列式をより速く計算するために使用できるトリックはありますか?この場合に機能する可能性のある12×1212×1212 \times12行列の乱雑な展開でしょうか? 同等性をテストする他の効率的な方法はありますか(1)(1)(1) 編集。コメントに答えるため。私はすべての接続された非自己相補的なグラフを計算する必要GGGための131313ようにGGG及びG¯¯¯¯G¯\overline{G}スパニングツリーの同じ数を有しています。この理由は、このmathoverflowの投稿にあります。マシンについては、8コア3.4GHhマシンで並行して実行しています。 編集。12×1212×1212 \times 12行列の行列式を具体的に計算するCプログラムを作成することで、予想される実行時間を50%短縮することができました。提案はまだ歓迎されています。


3
リアプノフの方程式を解くためのライブラリ
以下の行列方程式 におけるΣ -所与のためのBおよびC行列-共分散行列の特性として仕事に現れます。この方程式は、特に連続時間制御理論では、リアプノフの方程式として知られていること、およびこの線形方程式の特殊な性質を活用する、それを解くためのさまざまな既知のアルゴリズムがあることを学びました。 B Σ + Σ BT+ C= 0BΣ+ΣBT+C=0B\Sigma + \Sigma B^T + C = 0ΣΣ\Sigma −−-BBBCCC−−- グーグルから、MatlabとFortranの実装が存在することも学びました。SLICOTとRECSYを見つけました。ただし、ライセンスの問題により、SLICOTソースへのアクセスは停止されました。 私の仕事のほとんどはRで実装されており、ソルバーへのRインターフェイスを見つけることができなかったため、自分で作成することを検討しています。私の質問は、SLICOTが、リアプノフの方程式のソルバーを実装したFortran(またはC)の最高のライブラリであるかどうかです。また、大きなスパース行列を処理できる実装にも興味があります。 BBB

1
ヌル空間突出
システム所与A ∈ R 、N × Nが場合ヤコビ反復がソルバとして使用する場合には、私は、それを読んで、この方法は、収束しないであろうbはのヌル空間内の非ゼロ成分有し、Aが。それでは、Aのヌル空間にまたがるゼロ以外の成分がbにある場合、Jacobiメソッドは非収束であると正式に述べることができますか?ヌル空間に直交する解の一部は収束するため、数学的にどのように形式化できるのでしょうか。A x = b 、Ax=b,Ax=b,A ∈ Rn × nA∈Rn×nA\in\mathbb{R}^{n\times n}bbbAAAbbbAAA したがって、各反復からヌル空間を射影することにより、収束(または?)します。AAA ......... Iは、特にの場合に興味Lが零空間対称ラプラシアン行列は、ベクトルによって張られる1 N = [ 1 ... 1 ] T ∈ R N、および有するゼロ成分中ののヌル空間、ここではセンタリング行列です。それは、各ヤコビ反復がヌル空間を投影することを意味しますか、つまり、各反復は中央に配置されますLx=b,Lx=b,Lx=b,LLL1n=[1…1]T∈Rn1n=[1…1]T∈Rn1_n=[1\dots 1]^T\in\mathbb{R}^nL J b = b 、J = I − 1bbbLLLJb=b,Jb=b,Jb=b, LJ=I−1n1n1TnJ=I−1n1n1nTJ=I-\frac{1}{n}1_n1_n^TLLL?私はこれを求めているので、Jacobiの反復からヌル空間を投影する必要はないでしょう(言い換えれば、反復を中央に配置するために)。LLL

4
ラプラシアン行列の平方根を見つける
次の行列と仮定与えられたが [ 0.500 - 0.333 - 0.167 - 0.500 0.667を- 0.167を- 0.500 - 0.333 0.833 ] その転置とA T。製品A T A = G収量 [ 0.750 - 0.334 - 0.417 - 0.334 0.667 - 0.333 - 0.417 - 0.333 0.750 ]、AAA⎡⎣⎢0.500−0.500−0.500−0.3330.667−0.333−0.167−0.1670.833⎤⎦⎥[0.500−0.333−0.167−0.5000.667−0.167−0.500−0.3330.833] \left[\begin{array}{ccc} 0.500 & -0.333 & -0.167\\ -0.500 & 0.667 & -0.167\\ …

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}


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

1
PETScと並行して単純なAx = bシステムを解く
PETScパッケージは初めてです。 マトリックスマーケット形式の〜4000x4000マトリックスAを持っています。複数のプロセッサを使用してこれを解決するためにPETScを取得したいと考えています。 単一のプロセッサでシステムを解く方法は知っていますが、異なるプロセッサ間で行列とベクトルを分散する方法はわかりません。 これを行うための簡単な手順はありますか?
10 petsc  matrix 

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