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

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

10
使用可能な高速C ++マトリックスライブラリの推奨事項
使用可能な高速C ++マトリックスライブラリに関する推奨事項はありますか? 使用可能とは、次のことを意味します。 マトリックスオブジェクトには直感的なインターフェイスがあります(例:インデックス作成中に行と列を使用できます) LAPACKおよびBLASで実行できるマトリックスクラスで何でもできます。 簡単に習得して使用できるAPI Linuxにインストールするのは比較的簡単です(現在Ubuntu 11.04を使用しています) 私にとっては、早すぎる最適化を避けるために、現在、速度やメモリ使用よりもユーザビリティが重要です。コードを書く際、私は常に1-D配列(またはSTLベクトル)と適切なインデックスまたはポインター演算を使用して行列をエミュレートできましたが、バグを避けるためにしたくないです。また、行列をエミュレートするために使用した小さなプログラミングトリックのすべてを思い出すために私の限られた注意の一部を使用するのではなく、解決しようとしている実際の問題と問題領域にプログラムしようとする精神的な努力に焦点を当てたい、LAPACKコマンドなどを覚えておいてください。さらに、記述しなければならないコードが少なくなり、コードが標準化されるほど、より良い結果が得られます。 密か疎かはまだ関係ありません。私が扱っているマトリックスの一部はスパースになりますが、すべてではありません。ただし、特定のパッケージが密行列または疎行列を適切に処理する場合は、言及する価値があります。 テンプレートを作成することも重要ではありません。標準の数値型を使用し、double、float、int以外を保存する必要がないからです。いいですが、私がやりたいことには必要ありません。

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、(双)共役勾配法)の間に分岐点があります。 直接法を使用するか反復法を使用するかをどのように決定しますか?その選択をした後、特定のアルゴリズムをどのように選ぶのでしょうか?対称性の活用についてはすでに知っています(たとえば、スパース対称正定値システムに共役勾配を使用します)が、メソッドを選択する際に考慮すべきこのような他の考慮事項はありますか?

4
MATLABバックスラッシュ演算子は、正方行列の
いくつかのコードを「ストック」MATLABコードと比較していました。その結果には驚きました。 サンプルコードを実行しました(スパースマトリックス) n = 5000; a = diag(rand(n,1)); b = rand(n,1); disp('For a\b'); tic;a\b;toc; disp('For LU'); tic;LULU;toc; disp('For Conj Grad'); tic;conjgrad(a,b,1e-8);toc; disp('Inv(A)*B'); tic;inv(a)*b;toc; 結果 : For a\b Elapsed time is 0.052838 seconds. For LU Elapsed time is 7.441331 seconds. For Conj Grad Elapsed time is 3.819182 seconds. Inv(A)*B Elapsed time ...

3
線形方程式を解く方法を選択する方法
私の知る限り、線形方程式系を解くには4つの方法があります(さらにある場合は修正してください): システム行列がフルランク正方行列の場合、Cramerの規則を使用できます。 システム行列の逆または擬似逆を計算します。 マトリックス分解法を使用します(ガウスまたはガウスヨルダン消去法はLU分解と見なされます)。 共役勾配法などの反復法を使用します。 実際、特に高次元行列の場合、Cramerのルールを使用するか、逆行列または擬似逆行列を計算して方程式を解くことはほとんどありません。したがって、最初の質問は、それぞれ分解法と反復法を使用する場合です。システムマトリックスのサイズとプロパティに依存すると思います。 2番目の質問は、数値の安定性と効率の観点から、特定のシステムマトリックスに最適な分解法または反復法の種類を知っていることです。 たとえば、共役勾配法は、行列が対称かつ正定値の方程式を解くために使用されますが、をA T A x = A T bに変換することにより、任意の線形方程式に適用することもできます。正定行列の場合も、コレスキー分解法を使用して解を求めることができます。しかし、CGメソッドを選択するタイミングと、コレスキー分解を選択するタイミングはわかりません。私の感覚では、大きな行列にはCG法を使用した方が良いと思います。A x = bAバツ=b\mathbf{A}x=bATA x= ATbATAバツ=ATb\mathbf{A}^{\rm T}\mathbf{A}x=\mathbf{A}^{\rm T}b 長方形行列の場合、QR分解またはSVDのいずれかを使用できますが、ここでもいずれかを選択する方法がわかりません。 他のマトリックスについては、エルミート/対称マトリックス、スパースマトリックス、バンドマトリックスなど、適切なソルバーを選択する方法は今ではありません。

5
ATLASとMKLのパフォーマンスの違いは?
ATLASは無料のBLAS / LAPACKの代替品であり、コンパイル時にマシンに合わせて調整されます。MKLは、Intelが出荷する商用ライブラリです。パフォーマンスに関しては、これら2つのライブラリは同等ですか、それともMKLが一部のタスクで優位を占めていますか?もしそうなら、どれ?

16
計算科学における「2つは簡単、3つは難しい」の良い例
私は最近、メタ現象の定式化に遭遇しました:「2つは簡単、3つは難しい」(Federico Poloniによってこのように言い換えられます)。 特定の問題が2つのエンティティに対して定式化されると、比較的簡単に解決できます。ただし、3エンティティの定式化のアルゴリズムでは、難易度が大幅に増加し、場合によってはソリューションを実現不可能または実現不可能にすることもあります。 (フレージングをより美しく、簡潔で、正確にするための提案を歓迎します。) 計算科学のさまざまな分野(純粋な線形代数から始まり、包括的なターム計算物理学で終わる)の良い例は何ですか?

2
小さな行列式は、行列の悪条件を意味しますか?
正方の可逆行列があり、その行列式を取得し、そのを見つけた場合、det(A)≈0det(A)≈0\det(A) \approx 0これは行列の条件が悪いことを意味しますか? その逆も本当ですか?悪条件の行列の行列式はほぼゼロですか? Octaveで試したものを次に示します。 a = rand(4,4); det(a) %0.008 cond(a)%125 a(:,4) = 1*a(:,1) + 2*a(:,2) = 0.000000001*ones(4,1); det(a)%1.8E-11 cond(a)%3.46E10

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

4
正定対称(共分散)行列の逆行列を処理しますか?
統計とそのさまざまなアプリケーションでは、さまざまな用途で共分散行列を計算することがよくあります。場合によっては、さまざまな計算のためにこの行列の逆行列が必要になります(たとえば、この逆行列を(唯一の)中心行列とする2次形式)。このマトリックスの品質と使用目的を考えると、私は疑問に思います: 数値安定性の観点から、この逆を計算または使用する方法(2次形式または一般的な行列ベクトル乗算の場合)の最良の方法は何ですか?便利になる可能性のある因数分解?

5
numpyでインプレースで行列を置換
pythonのnumpyライブラリを使用して、行と列のいくつかの順序を変更することにより、密な正方形の遷移行列をインプレースで変更したい。数学的には、これは、行列に置換行列Pを事前乗算し、P ^ -1 = P ^ Tを事後乗算することに相当しますが、これは計算上合理的な解決策ではありません。 今私は手動で行と列を交換していますが、numpyには素敵な関数f(M、v)があり、Mにはn行と列があり、vにはnエントリがあるので、f(M、v)は更新されますMインデックス順列v。多分、インターネットの検索に失敗しているだけかもしれません。 このようなことは、numpyの「高度なインデックス作成」によって可能になるかもしれませんが、私の理解では、そのようなソリューションは適切ではありません。また、いくつかの単純な状況では、インデックス置換を個別に追跡するだけで十分かもしれませんが、これは私の場合は便利ではありません。 追加: 時々、人々が順列について話すとき、それらはランダムな順列のサンプリングを意味するだけです。例えば、統計のp値を取得する手順の一部として。または、可能なすべての順列をカウントまたは列挙することを意味します。私はこれらのことについて話していません。 追加: マトリックスはデスクトップRAMに収まるほど小さいが、思いがけずコピーしたくないほど大きい。実際には可能な限り大きなマトリックスを使用したいと思いますが、RAMに保持できないという不便さに対処したくありません。また、マトリックスに対してO(N ^ 3)LAPACK操作を行います。実用的なマトリックスサイズを制限します。私は現在、この大きな行列を不必要にコピーしていますが、これを置換のために簡単に回避できることを望みます。

3
BLAS、LAPACK、およびその他の線形代数ライブラリの関係は何ですか?
私が取り組んでいるプロジェクトのC ++線形代数ライブラリを検討しています。私がまだ把握していないことは、BLASとLAPACKを他の線形代数ライブラリに接続することです。 線形代数ライブラリに関するこの記事を見ると、次のことが興味深いことがわかりました。 一部のライブラリはBLASおよびLAPACKから独立しています 一部にはBLASとLAPACKが必要です 一部にはBLASおよびLAPACKへのオプションのインターフェースがあります そして、私が理解しているように、BLASとLAPACKを使用して線形代数の問題を直接解決できます。 一部のライブラリは、CおよびFortranで記述されたBLASおよびLAPACKライ​​ブラリに対する単なるC ++インターフェイスであり、他のライブラリは独自の代替ルーチンを実装していると想像できますが、 BLASおよびLAPACKへのオプションのインターフェイスの意味は何ですか?オプトアウトすることで失うものは何ですか?代わりにライブラリは何をしていますか? ライブラリは、単なるインターフェイス以上のものを提供しますか?たとえば、UMFPACKはCで記述されており、BLASおよびLAPACKへのオプションのインターフェースがあります。BLASとLAPACKが単独ではできないUMFPACK(または他のライブラリ)は何ができますか?

10
SVDの堅牢なアルゴリズム
行列のSVDを計算するための簡単なアルゴリズムは何ですか?2×22×22 \times 2 理想的には、数値的に堅牢なアルゴリズムが欲しいのですが、単純な実装とそれほど単純ではない実装の両方を見てみたいと思います。Cコードが受け入れられました。 論文やコードへの参照はありますか?

2
反復線形ソルバーが収束しないのはなぜですか?
KSP(PETScの線形ソルバーパッケージ)から事前に条件付けされたKrylovメソッドを使用して、偏微分方程式の離散化と線形化によって得られるようなスパース線形システムを解くと、何が問題になる可能性がありますか? 私の問題で何が問題になっているのかを判断するには、どのような手順を踏めばよいですか? 線形システムを正常かつ効率的に解決するために、どのような変更を加えることができますか?

3
線形連立方程式を解くためのクリロフ部分空間法の収束の背後にある原理は何ですか?
私が理解しているように、線形連立方程式を解くための反復法には2つの主要なカテゴリがあります。 定常法(Jacobi、Gauss-Seidel、SOR、Multigrid) クリロフ部分空間法(共役勾配法、GMRESなど) ほとんどの定常手法は、エラーのフーリエモードを繰り返し緩和(平滑化)することで機能することを理解しています。私が理解しているように、共役勾配法(クリロフ部分空間法)は、番目の残差に適用される行列のべきから最適な探索方向のセットを「ステップ実行」することによって機能します。この原理は、すべてのクリロフ部分空間法に共通ですか?そうでない場合、クリロフ部分空間法の収束の背後にある原則を一般的にどのように特徴付けますか?nnn

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