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

LAPACK(線形代数パッケージ)は、方程式の線形セットの解、線形最小二乗、固有値問題、特異値分解など、数値線形代数タスク用のサブルーチンの一般的に使用されるライブラリです。LAPACKルーチンは、fortran、C、親戚、およびその他のさまざまな言語で使用できます。

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(または他のライブラリ)は何ができますか?

3
行列ベクトル乗算のスケーリングが行われないのはなぜですか?
長い投稿で申し訳ありませんが、最初の段階で関連があると思ったものをすべて含めたかったのです。 私が欲しいもの Krylov Subspace Methods for Dense Matricesの並列バージョンを実装しています。主にGMRES、QMRおよびCG。(プロファイリング後)私のDGEMVルーチンは哀れなことに気付きました。それで、私はそれを分離することによってそれに集中することに決めました。12コアのマシンで実行してみましたが、以下の結果は4コアのIntel i3ラップトップ用です。傾向に大きな違いはありません。 私のKMP_AFFINITY=VERBOSE出力はここにあります。 私は小さなコードを書きました: size_N = 15000 A = randomly_generated_dense_matrix(size_N,size_N); %Condition Number is not bad b = randomly_generated_dense_vector(size_N); for it=1:n_times %n_times I kept at 50 x = Matrix_Vector_Multi(A,b); end これは、50回の反復でCGの動作をシミュレートすると思います。 私が試したもの: 翻訳 私はもともとFortranでコードを書いていました。C、MATLAB、Python(Numpy)に翻訳しました。言うまでもなく、MATLABとPythonは恐ろしいものでした。驚くべきことに、上記の値ではCはFORTRANよりも1〜2秒優れていました。一貫して。 プロファイリング 実行するコードのプロファイルを作成し、46.075数秒間実行しました。これは、MKL_DYNAMICがに設定されFALSE、すべてのコアが使用されていたときです。MKL_DYNAMICをtrueとして使用した場合、特定の時点で使用されていたコアの数は(およそ)半分だけです。詳細は次のとおりです。 Address Line Assembly CPU Time 0x5cb51c mulpd %xmm9, …

4
密行列が低ランクかどうかを迅速に判断する
私が取り組んでいるソフトウェアプロジェクトでは、特定の計算は、高密度の低ランクマトリックスに対して非常に簡単です。いくつかの問題の例には、高密度の低ランクマトリックスが含まれていますが、それらは要因としてではなく、完全に与えられているので、低ランク構造を利用したい場合は、ランクをチェックしてマトリックスを分解する必要があります。 問題のマトリックスは通常、完全にまたはほぼ完全に高密度で、nは100から数千までの範囲です。行列のランクが低い場合(5〜10未満など)、SVDを計算し、それを使用して低ランクの因数分解を行うことは労力に値します。ただし、マトリックスのランクが低い場合、労力は無駄になります。 したがって、完全なSVD分解を行うための労力を投資する前に、ランクが低いかどうかを判断するための高速で合理的に信頼できる方法を見つけたいと思います。ランクがカットオフを超えていることが明らかになった場合、プロセスはすぐに停止できます。手順が誤って低ランクであるとマトリックスを宣言した場合、これは大きな問題ではありません。低ランクを確認して低ランクの因数分解を見つけるために完全なSVDを実行しているからです。 私が検討したオプションには、LU分解またはQR分解を示すランクの後にチェックとして完全なSVDが含まれます。他に考慮すべきアプローチはありますか?

3
Ubuntuからビルド済みパッケージをインストールするよりも、ソースからLAPACKをコンパイルする利点はありますか?
ATLASはコンパイル対象のマシンに合わせて最適化できることを知っているため、ソースからコンパイルすることで最大のメリットが得られます。ソースからLAPACKをコンパイルすることに利点はありますか?ビルド済みのパッケージをインストールする方がはるかに簡単です。

3
NumpyがSVDを実行する方法を理解する
私は、行列のランクと行列方程式の解の両方を計算するために、さまざまな方法を使用しています。関数linalg.svdに出会いました。これを、Gaussian Eliminationでシステムを解くという私自身の努力と比較すると、より速く、より正確に見えるようです。私はこれがどのように可能かを理解しようとしています。 私の知る限り、linalg.svd関数はQRアルゴリズムを使用して、行列の固有値を計算します。私はこれが数学的にどのように機能するかを知っていますが、Numpyがどのようにそれを迅速かつあまり正確に失うことなく行うのかわかりません。 私の質問:numpy.svd関数はどのように機能し、より具体的には(ガウス消去と比較して)高速かつ正確にどのように処理するのですか?

2
LAPACKとBLASを使用して
既存のコードをMATLABからC ++に移植しており、を解決する線形システムを持っています(より一般的な形式A x = bではなく)xA=bxA=bxA=bAx=bAx=bAx=b 行列は高密度で一般的な形式ですが、1000x1000以下です。そのため、MATLABでは、解は関数またはスラッシュ表記法で見つかりますAAAmrdivide(b,A)x = b/A; BLASおよびLAPACKルーチンを使用して、C ++コードでこれを解決するにはどうすればよいですか? 私は、LAPACKルーチンに精通していDGESV解きするために、X。Ax=bAx=bAx=bxxx したがって、私が考えていたのは、行列の転置恒等式を使用していくつかの操作を行うことです。 (xA)T=bT(xA)T=bT(xA)^T=b^T ATxT=bTATxT=bTA^T x^T = b^T xT=(AT)−1bTxT=(AT)−1bTx^T = (A^T)^{-1} b^T 次にDGESV、転置操作を使用して最終形式を解きます。(Aを転置するコストとシステムを解決するコスト)ATATA^TAAA より効率的なアプローチや他の方法でより良いアプローチがありますか? BOOST uBLASライブラリからのBLAS実装だけでなく、LAPACKライ​​ブラリルーチンへのバインドと同様に、マトリックスクラスとベクトルクラスを使用しています。私はこのセットアップを他の操作に正常に使用してきましたが、これらのライブラリに限定されたソリューションを見つけたいと思っています。 また、コードのセットアップ中にこのタイプの操作を実行するのは数回だけなので、パフォーマンスは重要な問題ではありません。 たぶん、このMATLABのドキュメント上には、mrdivide他人のために有用です。

2
Matlab [Q、R、E] = qr(A)の背後にある対応するLAPACK関数は何ですか?
現在、行列適切なランク推定を安価に計算しようとしています。したがって、以下を使用してQR分解をピボット化するコラムレットを計算しますAAA [Q,R,E]=qr(A) Matlabで。を使用してのランクを推定しますAAA tol = size(A,n)*eps*norm(A,'fro'); r = sum(abs(diag(R))>tol) これは正常に機能し、Rのすべての対角要素に対するプロットは次のようになります。 RRR 入力行列は、両方の実験でまったく同じです。 私の質問は、Matlabからの列ピボットQR分解がどのLAPACK関数に依存しているかということです。 助けてくれてありがとう、グリス 編集: DGEQPFは同じ間違った結果を与えます。 編集2: AAAE+sign(E,F)E+sign(E,F)E+sign(E,F) AAA RRR LAPACK 3.4.0とOpenBlas / GotoBLAS(64ビット)を使用しました Matlab 7、2007b、2010b Linux 32ビット 編集3:-GDBを使用して、Matlab 2010bはDGEQP3を呼び出すことがわかりました:/usr/ubuntu10.04/matlabr2010b/bin/glnx86 /../../ bin / glnx86 /../からのdgeqp3_()の#3 0xaa46ce2f。 ...
12 matlab  lapack 

2
GPUシステムでのBLAS / LAPACKまたはその他の線形代数ルーチンの最速の実装は何ですか?
たとえば、nVidiaにはCUBLASがあり、7-14倍の高速化が約束されています。簡単に言えば、これはnVidiaのGPUカードの理論的なスループットに近いものではありません。GPUでの線形代数の高速化における課題は何ですか?また、より高速な線形代数のルーティングが既に利用可能ですか?

4
fortran 95およびLAPACKを使用したスキューエルミート行列の行列指数
量子力学のシミュレーションのために、Fortran 95に没頭しています。正直なところ、私はOctaveに甘やかされてきたので、当然行列の累乗法を採用しました。(小、与えられた)スキューサイズの-Hermitian行列のn × nは、この問題を解決するためにLAPACKを使用する最も効率的な方法は何ですか?LAPACK95ラッパーは使用せず、LAPACKを直接呼び出します。n≤36n≤36n\leq 36n×nn×nn\times n
11 fortran  lapack 

1
求める固有値並べ替えアルゴリズムのベンチマーク問題
すべての実行列は、直交類似変換を使用して、実Schurフォームに縮小できます。ここで、行列は、主対角線上に1 x 1または2 x 2のブロックを持つ準三角形の形式です。1 x 1の各ブロックは実固有値に対応し、2 x 2の各ブロックは複素共役固有値のペアに対応します。T = U T A U U T A AAAAT=UTAUT=UTAUT = U^T A UUUUTTTAAAAAA 固有値並べ替え問題は、ユーザーが選択したの固有値が左上隅の対角線に沿って現れるような直交相似変換を見つけることで構成されます。A S = V T T VVVVAAAS=VTTVS=VTTVS = V^T T V LAPACKでは、関連するルーチンの倍精度ルーチンはDTRSENと呼ばれます。Daniel KressnerがブロックされたバージョンをBDTRSENという名前で書きました。ScaLAPACKルーチンはPDTRSENです。 固有値の並べ替えの問題を解決する上での進歩が真の利益となるアプリケーションとアルゴリズムを探しています。 準三角形式のテスト行列は簡単に生成できますが、ユーザーが選択した固有値の現実的な分布の形を決定するのに問題があります。 私の観点からは、リッツ加速を使用した部分空間反復は、並べ替えアルゴリズムの改善をテストするための理想的なアルゴリズムです。(スパース)行列ベクトル乗算、tall QRアルゴリズム、および並べ替えアルゴリズムが必要です。 ただし、特定の固有ペアのセットが物理的に興味深いことが明らかな場合、実際の問題を見つけるのは難しいです。 共有メモリマシンを使用して、40,000次元の密行列に対して固有値の並べ替えを行うことができます。ユーザーがすべての固有値の約50%を選択すると、最高のパフォーマンスが得られます。


3
Fortran 95とLAPACKを使用した実際の非対称行列の行列指数
最近、スキューエルミート行列について同じ質問をしました。その質問の成功に触発され、数時間壁に頭をぶつけた後、本当の非対称行列の行列指数を調べています。固有値と固有ベクトルを見つける方法はやや複雑で、迷ってしまったようです。 背景:先ほど、私は理論物理学SEについてこの質問をしました。その結果、マスター方程式を実際の非対称行列として表現できます。時間に依存しないケースでは、マスター方程式はこの行列をべき乗することによって解かれます。時間に依存するケースでは、統合が必要になります。現時点では、時間に依存しないことだけに関心があります。 様々なサブルーチンを見ている時に、私は私が呼び出しされるべきだと思う(?gehrd、?orghr、?hseqr ...)それから行列をキャストする方が簡単だろう場合、それは不明であるreal*8とcomplex*16、これらのルーチンの複雑な二重のバージョンでと進み、またはreal*8、私の配列の数を2倍にして、後でそれらの複雑な行列を作成するという制限を守ってください。 では、どのルーチンを(どのような順序で)呼び出す必要があり、実際のdoubleバージョンまたは複素doubleバージョンを使用する必要がありますか?以下は、実際のダブルバージョンでこれを行う試みです。の固有値と固有ベクトルを見つけるのに行き詰まっていL*tます。 function time_indep_master(s,L,t) ! s is the length of a side of L, which is square. ! L is a real*8, asymmetric square matrix. ! t is a real*8 value corresponding to time. ! This function (will) compute expm(L*t). integer, intent(in) :: s real*8, intent(in) :: …

3
C ++でLAPACKを使い始める方法は?
私は計算科学が初めてで、統合、補間、c ++でのRK4、Numerovなどの基本的な方法をすでに学びましたが、最近、教授から、LAPACKを使用して行列に関連する問題を解決する方法を学ぶように求められました。たとえば、複雑な行列の固有値を見つけるようなものです。私はサードパーティのライブラリを使用したことがなく、ほとんど常に自分の関数を記述しています。私は数日間探し回っていましたが、素人向けのlapackガイドは見つかりませんでした。それらはすべて私が理解できない言葉で書かれており、すでに書かれた関数を使用することがなぜこれほど複雑になるのか、私にはわかりません。彼らはzgeev、dtrsvなどの言葉でいっぱいで、私は不満を感じています。私はこの疑似コードのようなものをコーディングしたいだけです: #include <lapack:matrix> int main(){ LapackComplexMatrix A(n,n); for... for... cin>>A(i,j); cout<<LapackEigenValues(A); return 0; } ばかげているのか、アマチュアなのかわかりません。しかし、繰り返しますが、これはそれほど難しいことではありませんか?LAPACKとLAPACK ++のどちらを使用すればよいかわかりません。(私はc ++でコードを書いていて、PythonやFORTRANの知識がありません)、そしてそれらをインストールする方法。
10 lapack 

3
LAPACKが(反射ベクトルを正規化する代わりに)QR分解でを使用する理由は何ですか?
LAPACKのQRルーチンは、Qをハウスホルダーリフレクターとして保存します。反射ベクトルをでスケーリングするため、結果の最初の要素はになるため、保存する必要はありません。そして、必要なスケールファクターを含む個別のベクトルを格納します。したがって、リフレクタマトリックスは次のようになりますvvv1/v11/v11/v_1111ττ\tauH=I−τvvT,H=I−τvvT,H=I-\tau v v^T, ここで、は正規化されていません。教科書では、反射板の行列はvvv H=I−2vvT,H=I−2vvT,H = I-2vv^T, ここで、は正規化されています。vvv LAPACKはを正規化する代わりに、でスケーリングするのはなぜですか?vvv1/v11/v11/v_1 必要なストレージは同じであり(代わりに、を格納する必要があります)、と乗算する必要がないため、適用をより高速に実行できます(教科書バージョンのとの乗算を最適化できます)。単純な正規化の代わりに、はによってスケーリングされます。ττ\tauv1v1v_1HHHττ\tau222vvv2–√/∥v∥2/‖v‖\sqrt 2/\|v\| (私の質問の理由は、QRおよびSVDルーチンを作成していることです。私がそれに従う必要があるかどうかにかかわらず、この決定の理由を知りたいのですが)

1
マトリックスバランスアルゴリズム
私は制御システムのツールボックスをゼロから作成し、純粋にPython3(恥知らずなプラグイン:)で作成していharoldます。私の過去の調査から、Riccatiソルバーについて、care.m技術的/無関係な理由で常に不満を持っています。 したがって、私は自分の一連のルーチンを作成しています。私が回避策を見つけることができない1つのことは、少なくともと同等の高性能バランシングアルゴリズムを取得することbalance.mです。言及する前に、xGEBALファミリはScipyで公開されており、基本的には次のようにScipyから呼び出すことができます。float型の2D配列があるとしますA。 import scipy as sp gebal = sp.linalg.get_lapack_funcs(('gebal'),(A,)) # this picks up DGEBAL Ab, lo, hi, scaling , info = gebal(A, scale=1 , permute=1 , overwrite_a=0 ) 次のテストマトリックスを使用する場合 array([[ 6. , 0. , 0. , 0. , 0.000002], [ 0. , 8. , 0. , 0. , 0. ], …

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