タグ付けされた質問 「linear-algebra」

線形システムの解、最小二乗問題、固有問題、その他の問題を含む、線形代数のアルゴリズム/計算的側面に関する質問。

2
代数的マルチグリッド:補間と制限の積がノルム1の結果にならないのはなぜですか?
私は現在、ブリッグスらによる第8章の「マルチグリッドチュートリアル」で作業しています。 補間演算子の構成は次のとおりです。 次に、制限演算子と細かいグリッド演算子の構築は次のように与えられます: 3つのグリッドポイントx0、x1、x2があり、中央のグリッドポイントx1は細かく、他のグリッドポイントは粗いものと仮定します。真ん中のものはによって補間されx1 = x0*w0 + x2*w2ます。したがって、補間演算子は(Matlabで): I = [1, 0, 0; w0, 0, w2; 0, 0, 1] I = [ 1, 0, 0] [ w0, 0, w2] [ 0, 0, 1] 制限演算子は次のとおりです。 transpose(I) ans = [ 1, w0, 0] [ 0, 0, 0] [ 0, w2, 1] では、制限してから直接補間するとどうなるのか、Iそしてandの乗算になる結果を見てみましょうtranspose(I)。 …

2
Pythonで非常に大きくて疎な隣接行列のすべての固有値を計算する最速の方法は何ですか?
scipy.sparse.linalg.eigshを使用するよりも非常に大きくて疎な隣接行列のすべての固有値と固有ベクトルを計算するより速い方法があるかどうかを把握しようとしていますマトリックスの対称属性。隣接行列もバイナリであるため、より高速な方法があると思います。 ランダムな1000x1000スパース隣接行列を作成し、x230 ubuntu 13.04ラップトップでいくつかの方法を比較しました。 scipy.sparse.linalg.eigs:0.65秒 scipy.sparse.linalg.eigsh:0.44秒 scipy.linalg.eig:6.09秒 scipy.linalg.eigh:1.60秒 スパースeigとeigshで、希望する固有値と固有ベクトルの数であるkを行列のランクに設定します。 問題は、より大きな行列から始まります-9000x9000行列では、scipy.sparse.linalg.eigshに45分かかりました!

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

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を見つける必要があるため、新しい行のエントリは時間とともに指数関数的に大きくなります。行列の縮小形を見つけると、問題がさらに悪化します。 私の質問は、線形独立性をテストし、エントリを可能な限り小さく保ちながら行の階段型を解くことができるアルゴリズム、またはそれ以上の実装がありますか?線形独立性の効率的なテストは、インデックス計算アルゴリズムで最も多く実行されるため、特に重要です。

1
ODEの線形システムのアルゴリズム
私は疑問に思います:を解くのに最適なアルゴリズムは何ですか ここでは実行列です。Aは明示的に時間依存ではなく、通常は疎ですが、必ずしもバンド化されていません。その固有値には正の実数部があります。Aは対角化も可能ですが、完全に対角化するには計算が効率的すぎるには大きすぎる場合があります。dあなたはdt= A udあなたはdt=Aあなたは\begin{equation} \frac{du}{dt} = Au \end{equation}AAAn × nn×nn\times n 私が良い経験をした暗黙の台形規則があります。 (私は- Δ トン2A )あなたn + 1= ( I+ Δ トン2A )あなたn(私−△t2A)あなたはn+1=(私+△t2A)あなたはn\begin{equation} \left(I-\frac{\Delta t}{2} A\right) u_{n+1} = \left(I+\frac{\Delta t}{2} A\right) u_{n} \end{equation} 明示的な方法やパデ近似はどうですか?また、強制用語がRHSに追加された場合、これはどのように変わりますか?

3
Blaze線形代数ライブラリ?
SIAM Journal of Scientific Computingの論文「Expression Templates Revisited:A Performance Analysis of Current Methodologies」は、「Blaze」線形代数ライブラリを参照しています。私はそれについて聞いたことがなく、オンラインの参照を見つけることができないようです。(明らかなグーグル検索は上記の論文を返している。) それでは、このライブラリとは何であり、どこで詳細について学ぶことができますか?

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

3
加法的な事前調整スキームは、どのような場合に乗法的なものより優れていますか?
ドメイン分解(DD)とマルチグリッド(MG)の両方の方法で、ブロック更新または粗補正のアプリケーションを加算または乗算のいずれかとして構成できます。点ごとのソルバーの場合、これはヤコビ反復とガウスザイデル反復の違いです。S (x o l d、b )= x n e wとして機能するの乗法スムーザーは、A x = bAバツ=bAx = bS(xO l d、b )= xN E WS(バツold、b)=バツnewS(x^{old}, b) = x^{new} バツi + 1= Sn(Sn − 1(。。。、S1(x私、b )。。。、b)、b )バツ私+1=Sn(Sn−1(。。。、S1(バツ私、b)。。。、b)、b) x_{i+1} = S_n(S_{n-1}( ..., S_1(x_i, b) ..., b), b) 加法平滑剤は次のように適用されます バツi + 1= x私+ ∑ℓ = 0nλℓ(Sℓ(x私、b )− …

3
効率的な三重対角行列アルゴリズムの実装
暗黙的な数値スキームを使用して物理的な問題を解決しています。これは、三重対角行列を持つ線形方程式を解くことにつながります。私はウィキペディアからこのアルゴリズムをコーディングしました。このタイプの方程式を最適化された方法で解くことができる効率的なライブラリがあるのだろうか。重要な注意点は、システムパラメーターが変更されたときにのみマトリックス自体が変更されることです。そのため、素晴らしいパフォーマンスボーナスを得るために、いくつかのアルゴリズムステップを事前に計算する機会がありました。C ++を使用しています。

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) …

1
逆数のない最小の固有値
仮定A∈Rn×nA∈Rn×nA\in\mathbb{R}^{n\times n}の対称正定値行列です。 AAAは十分大きいため、Ax=bAx=bAx=b直接解くのは高価です。 最小固有値見つけるための反復アルゴリズムがあるAAA反転関与しないAAA各反復では? つまり、共役勾配のような反復アルゴリズムを使用してを解かなければならないため、A - 1をAx=bAx=bAx=b繰り返し適用することは高価な「内部ループ」のように思えます。必要なのは単一の固有ベクトルだけです。A−1A−1A^{-1} ありがとう!

2
科学計算における複雑な算術演算の危険性
複素内積二つの異なる定義が規則によって決定した:ˉ U Tの VまたはU T ˉ V。BLASで、cdotu、zdotu、およびcdotc、zdotcのルーチンを見つけました。前の2つのルーチンは実際にu T v(偽の内積!)を計算し、最後の2つのルーチンは内積の最初のベクトルを共役させます。また、いずれかの定義によって(共役U又はV)、⟨ U 、V ⟩ = ¯ ⟨ V 、U ⟩⟨ U 、V ⟩⟨u,v⟩\langle u,v\rangleあなたは¯Tvu¯Tv\bar{u}^TvあなたはTv¯uTv¯u^T\bar{v}あなたはTvuTvu^Tvあなたはuuvvv⟨ U 、V ⟩ = ⟨ V 、U ⟩¯¯¯¯¯¯¯¯¯¯¯⟨u,v⟩=⟨v,u⟩¯\langle u,v\rangle=\overline{\langle v,u\rangle}活用して!さらに、コメントで指摘されているように、多値の複雑な関数の主要な値を選択することは、慣習に依存する可能性があります。 私の質問は次のとおりです。この複雑さは科学計算での複雑な算術演算の使用に対して真の危険を引き起こしますか?この問題は、複素数を常に実部と虚部に分割し、実算のみを使用することを提案するdeal.iiの著者によって強調されています。しかし、分割アプローチが便利だとは思いませんでした。たとえば、時間調和マックスウェル方程式のPMLについて考えます。 FreeFem ++およびlibmeshを除くほとんどのオープンソースFEMソフトウェアでは、複素数を使用することの心配が一般的であるようです。ただし、2つの例外についても、複雑な算術演算は実際よりもテストされていません。 私の最後の質問は、複素数の使用を常に避けなければならないのかということです。

1
ラインサーチおよび信頼領域アルゴリズムのスケール不変性
Nocedal&Wrightの数値最適化に関する本では、セクション2.2(27ページ)に「一般的に、信頼領域アルゴリズムよりもライン探索アルゴリズムのスケール不変性を保持する方が簡単です」という記述があります。同じセクションで、元の変数のスケーリングされたバージョンである新しい変数を使用することについて説明します。これは、ライン検索と信頼領域の両方に役立ちます。別のアプローチは事前調整です。信頼領域メソッドの場合、事前条件付けは楕円形の信頼領域を持つことと同等であるため、スケール不変性を提供します。ただし、行検索の前提条件については、同様の直観が明確ではありません。線の探索はどのような点でスケール不変性に適していますか?実用的な考慮事項はありますか? また、信頼領域メソッドの前提条件に関する質問があります。非常に条件の悪い問題の場合、優れた前提条件は外側のニュートン反復と内側のCG反復の両方を減らすか、後者のみを減らすか?信頼領域は元の空間では楕円体であるため、適切な前提条件子を使用すると、地形によりよく一致する楕円体が得られます。これにより、アルゴリズムがより良い方向に進むように強制することにより、外側のニュートン反復の数を減らすことができると思います。これは正しいですか?

2
行列が半正定かどうかをテストする
正の半正定性を確認する必要がある対称行列のリストLL{\cal L}があります(つまり、それらの固有値は非負です)。 上記のコメントは、それぞれの固有値を計算し、それらが非負であるかどうかをチェックすることで実行できることを示しています(おそらく丸め誤差を処理す​​る必要があります) 私のシナリオでは固有値の計算は非常に高価ですが、使用しているライブラリは正の確定性(つまり、行列の固有値が厳密に正である場合)のテストが非常に高速であることに気付きました。 したがってアイデアは、マトリックス与えられたであろうB∈LB∈LB \in {\cal L}、あるテスト場合にB+ϵIB+ϵIB + \epsilon I正定値です。そうでない場合、BBBは正の半正定値ではありません。そうでない場合、の固有値を計算して、BBBそれが実際に正の半正定値であることを確認できます。 私の質問は次のとおりです。 正定性の効率的なテストが提供されている場合、行列が半正定かどうかをテストするより直接的で効率的な方法はありますか?

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