Sina
Sina

Reputation: 411

Memory error in Matlab while solving a linear equation

I am having Out of Memory error while trying to solve a certain linear equation (I will put the code below). Since I am used to coding in C where you have every control over the objects you create I am wondering if I am using matlab inefficiently. Here is the relevant part of the code

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;

Trying to use this code I get the error

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

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

Before this piece of code I only open some files (which contain two 100x100 array of floats) so I dont think they contribute to this error. The element AMatrix is a 100 x 100 array. So the linear equation in question has dimensions 10000 x 10000. Also AA has one dimensional kernel, I dont know if this affects the numerical computations. Later I project the obtained solution to the orthogonal complement of the kernel to get the "good" solution but it comes after the error. For people who are familiar with it this is just a solution to the Lyapunov equation AX + XA = Cov. The matrix A is sparse, it has 4 50x50 sublocks one of which is all zeros, the other is identity, the other is diagonal and the other has less than 1000 non-zero elements. The matrix CovMatrix is diagonal with 50 non-zero elements in the diagonal.

The problem is at the moment I can only do the calculations on a small personal computer with 2GB RAM with 2.5-6GB of virtual memmory. When I run memmory on matlab it gives

>> 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)

I am not very knowledgable when it comes to memory so I am open to even simple advices. Thanks.

Upvotes: 1

Views: 107

Answers (1)

kangshiyin
kangshiyin

Reputation: 9781

Complex functions usually allocate temp memory during computation. 10000x10000 looks quite large if a temp dense matrix of such size is allocated during the computation. You could try a few smaller problem sizes and find out the upper limit of your current computer.

Upvotes: 1

Related Questions