0

私は正方行列 A の次元削減を行っています。私の問題は、13000 x 13000 行列 A の eigvalue 分解の計算に問題があること[v d]=eigs(A)です。これはスパース行列であるため、4GB RAM を使用すると「メモリ不足エラー」が発生します。eigsコマンドの実行時にメモリが使い果たされていないため、これは私の PC の問題ではないと確信しています。私がオンラインで見たヘルプは ARPACK に関するものでした。おすすめサイトをチェックしたのですが、ファイルが多くてどれをダウンロードすればいいのかわかりません。また、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) 

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

4

2 に答える 2

3

メモリの使用量が表示されない理由は、メモリが使用されていないためです。Matlab は必要な量のメモリを割り当てることができません。

13000 x 13000 double の配列 (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 の外部で計算を行うことができます。

于 2011-07-11T11:14:03.357 に答える
0

まず、A がスパースの場合、single(A) は機能しません。単一の疎行列は MATLAB に実装されていません。コメントを参照してください: mex ファイルで単一の float 疎行列を作成する方法

ishermitian行列の 2 つのコピー (A と A') を格納できないため、の呼び出しが失敗する場合があります。行列をエルミートかどうかに応じて、行をコメントアウトしてまたはに設定issymAすることで、この問題を回避します。truefalse

内のメモリにさらに問題がある場合は、質問する解を少なくするか、基底の最大サイズを小さくして (オプション)、既定では質問された解の数の 2 倍にするeigsことで、そのメモリ映像を減らしてみてください。eigs(A,1)p

 opts.p = 3
 [x,d] = eigs(A,2,'LM',opts)
于 2016-11-16T16:35:22.260 に答える