Date: Jun 18, 1996 11:50 AM
Author: John D'Errico
Subject: sparse matrix bug

An interesting little bug I tripped over in Matlab on the Sun
today. It is also in the mac version.

Matlab is supposed to work with sparse matrices and full matrices
together, leaving the result as a sparse matrix.

For example, when A is sparse and B is full,

C=A+B;

C is supposed to be sparse. This is good.

C=A*B;

C is still supposed to be sparse. Still good.

Consider the following expression though.

C = A(:,ind) - B*(R1\R2);

A and B are sparse. ind is an index vector (full). R1 and R2
are full. C should be sparse, since it is a sum of terms,
all of which should be sparse.

NOT so. At least not on a Mac running 4.2c1 or on a sparc5.

I can fix it, by forcing R1 and R2 to be sparse, but this
cost me some headaches. When I later tried to use C, which is
huge when full, it crashed the sparc20 I was running it on
remotely with memory problems. It did not return cleanly. I
tried it again on my own sparc5, and it quickly crashed that
system too. No out of memory message. Just reboot.

If you do not believe me, try out the following code.
Check out b after it is computed. Full. Not sparse.

John D'Errico, derrico@kodak.com

------------------------------------
a = sprandn(100,50,0.1);
c = sprandn(10,50,0.05);
c=full(c);

crank=rank(c);

[q,r,e]=qr(c,0);

j_subs=e(1:crank);
j_est=e((crank+1):50);

a1=a(:,j_subs);

r1=r(1:crank,1:crank);
r2=r(1:crank,(crank+1):50);

b=a(:,j_est)-a1*(r1\r2);

whos
-------------------------------------