ある線形方程式を解く際にメモリ不足エラーが発生しています(以下のコードを記述します)。私は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)
を与え、私も簡単なアドバイスに開いていますので、それがメモリに来るとき、私は非常に知識豊富ではないと思います。ありがとう。
'kron'の出力である' AA'はまだまばらですか? '' issparse'の意味で? –
マイナーノート: 'sparse(eye(2 * M))'は 'speye(2 * M)'で行うことができます。 –
AMatrixとCovMatrixを作成するコードを書くことができれば素敵です(無作為の値であっても)。あるいは、2つのファイルをどこかに投稿してください。あなたの説明からあなたの配列を再作成しようとしています。私はそれを正しくやっている。考えてくれてありがとう。 –