Memory issues with large size matrices

Uncategorized
Jan 5, 2016
J

We are working on a problem that requires solving of a SDP. While creating matrices of larger size(1990x 1990) we are facing memory related problems. Following are the details:

We are using following code for solving the above problem:

file = csvread(‘b.csv’);

[rows,cols] = size(file);

y = randi([0 1],cols,cols);
sum1 = 0;
sum2 = 0;

cvx_begin sdp
variable M(rows,rows) symmetric;
M == semidefinite(rows);

for i = 1:cols        
    tic
    x = file(:,i);
    for k = 1:cols
        z = file(:,k);       
        r = x-z;                      
        sum1 = sum1 + (1-y(i,k)) * sqrt(r' * M * r);
        sum2 = sum2 + y(i,k) * (r' * M * r);           
    end          
    toc
end     
maximize(sum1);
subject to
    sum2 <= 1 

cvx_end

xlswrite(‘learn_M.xlsx’,M);

Working instace: While defining M of size (5x5) the CVX module mentioned above works perfectly and returns required results.

Non-working instace: Our need is to have M of size(1990x1990). While running the module as above we get follwing error message:
Error using sparse
Sparse matrix sizes must be non-negative integers less than MAXSIZE as defined by COMPUTER. Use HELP COMPUTER for
more details.

Error in cvx_reshape (line 41)
x = sparse( ii, jj, x, s( 1 ), s( 2 ) );

Error in * (line 199)
z2 = cvx_reshape( z2, [ nA * sy( 2 ), sy( 1 ) ], [], t1 );

Error in learning_m1 (line 28)
sum1 = sum1 + (1-y(i,k)) * sqrt(r’ * M * r);

Would appreciate some insights in this issue.

Thnak you

M

I’m afraid it is unlikely we can help you here. We’re at the mercy of MATLAB, and if their sparse matrix operations run out of memory, there’s nothing we can do.