2016-07-20 17 views
1

ある線形方程式を解く際にメモリ不足エラーが発生しています(以下のコードを記述します)。私はCでコーディングするのに慣れているので、あなたが作成するオブジェクトを自由にコントロールできます。私はmatlabを非効率的に使用しているのでしょうか?ここでは、コードのこの作品は、私だけ(2つのfloat値の100×100のアレイを含んで)いくつかのファイルを開く前に、私はエラーにMatlabで線形方程式を解く際にメモリエラーが発生する

Error using \ 
Out of memory. Type HELP MEMORY for your options. 

Error in COV (line 62) 
x=myData(n).CovMatrix\myData(n).AA; 

を取得するコードこのコードを使用しようとすると

myData(n).AMatrix = sparse(fscanf(fid2, '%f', [2*M, 2*M])); 
myData(n).AMatrix = transpose(myData(n).AMatrix); 

%Read the covariance^2 matrix 
myData(n).CovMatrix = sparse(fscanf(fid2, '%f', [2*M,2*M])); 
myData(n).CovMatrix = reshape(myData(n).CovMatrix, [4*M*M,1]); 

%Kronecker sum of A with itself 
I=sparse(eye(2*M)); 
myData(n).AA=kron(I, myData(n).AMatrix)+kron(myData(n).AMatrix,I); 
myData(n).AMatrix=[]; 
I=[]; 

%Solve (A+A)x = Vec(CovMatrix) 
x=myData(n).CovMatrix\myData(n).AA; 

の関連する部分がありますだから私は彼らがこのエラーに寄与しないと思う。要素AMatrixは100×100の配列です。したがって、問題の線形方程式は10000 x 10000の次元を持ちます。また、AAには1次元のカーネルがあります。これが数値計算に影響を与えるかどうかはわかりません。後で私は得られた解をカーネルの直交補数に投影して "良い"解を得るが、それはエラーの後に来る。これに精通している人にとっては、これはLyapunov方程式AX + XA = Covの単なる解である。行列Aは疎であり、50×50の4つのサブロックを持ち、そのうちの1つはすべてゼロであり、もう1つは同一性であり、もう1つは対角であり、もう1つは非ゼロの要素が1000未満である。行列CovMatrixは対角線上に50個の非ゼロ要素を持つ対角行列です。

問題は現時点では2.5GBの仮想メモリを搭載した2GBのRAMを搭載した小型のパーソナルコンピュータでのみ計算できます。私はMathWorks社のMATLAB上でmemmoryを実行すると、それは

>> memory 
Maximum possible array: 311 MB (3.256e+08 bytes) * 
Memory available for all arrays: 930 MB (9.749e+08 bytes) ** 
Memory used by MATLAB: 677 MB (7.102e+08 bytes) 
Physical Memory (RAM): 1931 MB (2.025e+09 bytes) 

を与え、私も簡単なアドバイスに開いていますので、それがメモリに来るとき、私は非常に知識豊富ではないと思います。ありがとう。

+0

'kron'の出力である' AA'はまだまばらですか? '' issparse'の意味で? –

+0

マイナーノート: 'sparse(eye(2 * M))'は 'speye(2 * M)'で行うことができます。 –

+0

AMatrixとCovMatrixを作成するコードを書くことができれば素敵です(無作為の値であっても)。あるいは、2つのファイルをどこかに投稿してください。あなたの説明からあなたの配列を再作成しようとしています。私はそれを正しくやっている。考えてくれてありがとう。 –

答えて

1

複雑な関数は通常、計算中に一時メモリを割り当てます。 10000x10000は、計算中にそのようなサイズの高密度の行列が割り当てられている場合にはかなり大きく見えます。あなたはいくつかの小さな問題のサイズを試し、あなたの現在のコンピュータの上限を見つけることができます。

関連する問題