2011-07-11 29 views
0

私は正方行列Aの次元縮小を行っています。私の問題は、13000 x 13000行列Aの固有値分解計算問題、すなわち[v d]=eigs(A)です。それは疎な行列なので、4GBのRAMを使用して「メモリ不足」というエラーが発生します。 eigsコマンドを実行したときにメモリが使い果たされていないので、私のPCの問題ではないと私は確信しています。私がオンラインで見た助けは、ARPACKと関係がありました。私は推奨サイトをチェックしましたが、そこにはたくさんのファイルがあり、ダウンロードするのか分かりません。また、MATLABでの使用方法もわかりませんでした。もう一つの助けは数値的な方法を使っていると言っていますが、使用する特定の方法はわかりません。どんな解決策も歓迎します。MATLABを使用した固有値分解

Error in ==> eigs>ishermitian at 1535 
tf = isequal(A,A'); 

Error in ==> eigs>checkInputs at 479 
      issymA = ishermitian(A); 

Error in ==> eigs at 96 
[A,Amatrix,isrealprob,issymA,n,B,classAB,k,eigs_sigma,whch, ... 

Error in ==> labcomp at 20 
[vector lambda] = eigs(A) 

これらのエラーの翻訳と解決方法を教えてください。

+0

同様の質問:http://stackoverflow.com/questions/3181593/matlab-is-running-out-of-memory-but-it-should-not-beデフォルト '関数eigs(BY – Amro

+0

。 ) 'は6つの最大固有値とそれに関連する固有ベクトルだけを返します。これはメモリの問題ではありません。あなたの「A」がどれほどのメモリを要しているか、すなわちどれほど希薄であるか?ありがとう – eat

+0

私はこの問題のニュアンスがわからないので、完全に答えを出すことはできませんが、通常は非常に大きな配列の固有分解が必要な特異値分解を使用します。 MATLABの 'SVD'関数をチェックしてください。 –

答えて

3

メモリが使い尽くされていない理由は、メモリが使い果たされていないことです.Matlabは必要なメモリを割り当てられません。

13000 X 13000倍(MATLABで既定のデータ型)の配列は、約1.25 GBですが、それは4GBのRAMが十分であることを意味しません - MATLABは、それ以外の場合は優勝、連続しメモリーの1.25GBを必要としますあなたの行列の割り当てに成功しません。あなたはここにMATLABでメモリの問題の詳細を読むことができます:http://www.mathworks.com/support/tech-notes/1100/1106.html

あなたが最初のステップとして、単精度を使用して試すことができます:

[v d]=eigs(single(A)); 

あなたは

別のヘルプが数値法

を使用すると言う言います

コンピュータで実行している場合は、定義上数値です。

Matlabで実行する必要がある(メモリの制約のためにできない)場合は、線形代数ライブラリ(ARPACKはその1つだけです)を探して、計算をMatlabの外で行うことができます。

+0

あなたの回答をありがとう、私はデータクラス 'シングル'に変換しましたが、それでも同じエラーが発生します。ARPACKについては、実装方法に関するヒントがあれば、それを理解していない。 – pam

+0

各ライブラリには、通常、いくつかのドキュメント/サンプル/ユーザーガイドがあります。いくつかはより詳細であり、いくつかはより少ない。ライブラリをダウンロードし、ドキュメントを見て、いくつかのコード例を探してみてください。 ARPACKでは、たとえばhttp://www.caam.rice.edu/software/ARPACK/UG/node22.html#SECTION00630000000000000000を参照してください。 –

0

最初にAが疎であれば、シングル(A)は機能しません。シングルスパース行列は、MATLABで実装されていない、コメントを参照してください:あなたはあなたの行列(AおよびA ')の2つのコピーを保存することはできませんのでishermitianへの呼び出しが失敗することがあり how to create a single float sparse matrix in mex files

。この問題を回避するには、ラインがコメントアウトされていて、マトリックスがエルミートであるかどうかに応じて、をtrueまたはfalseに設定します。デフォルトでは、二回尋ねたソリューションの数である

あなたはeigs内部メモリとのさらなる問題を発見した場合は、以下のソリューションを尋ねることによって、メモリの映像を削減しようと、eigs(A,1)、または根拠の最大サイズ(オプションp)を低減、 :

opts.p = 3 
[x,d] = eigs(A,2,'LM',opts) 
関連する問題