解决线性方程时Matlab中的内存错误

时间:2016-07-20 14:20:19

标签: matlab memory out-of-memory linear-algebra

我在尝试解决某个线性方程式时出现内存不足错误(我将把代码放在下面)。因为我习惯于在C中编码,你可以对你创建的对象进行任何控制,我想知道我是否使用matlab效率低下。这是代码的相关部分

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;

尝试使用此代码我收到错误

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

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

在这段代码之前,我只打开一些文件(包含两个100x100的浮点数组),所以我不认为它们会导致这个错误。元素AMatrix是100 x 100阵列。因此,所讨论的线性方程的维数为10000 x 10000.AA也有一维内核,我不知道这是否会影响数值计算。后来我将获得的解决方案投影到内核的正交补码以获得“好”解决方案,但它出现在错误之后。对于熟悉它的人来说,这只是Lyapunov方程AX + XA = Cov的解决方案。矩阵A是稀疏的,它有4个50x50子锁,其中一个全部为零,另一个是同一性,另一个是对角线,另一个是非零元素。矩阵CovMatrix是对角线,对角线上有50个非零元素。

问题是目前我只能在配备2GB内存和2.5-6GB虚拟内存的小型个人计算机上进行计算。当我在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)

在内存方面我不是很了解,所以即使是简单的建议也是如此。感谢。

1 个答案:

答案 0 :(得分:1)

复杂函数通常在计算期间分配临时内存。如果在计算期间分配了这种大小的临时密集矩阵,则10000x10000看起来非常大。您可以尝试一些较小的问题大小,并找出当前计算机的上限。