Sparse matrices are constructed using the sparse function. The most general calling sequence is sparse( u, v, w, m, n, max ) where u, v, and w are row vectors each of the same dimension, m and n are the dimensions of the matrix, and max is the maximum number of elements the matrix is expected to store. If we designate the matrix A, then the entries of the matrix are assigned as follows:
>> for i=1:length(u), A(u(i), v(i)) = w(i) end
For example, the following creates a 20x20 matrix, with room for 30 entries, and fills that matrix with 10 values:
>> A = sparse( 1:10, 3:13, linspace( 1.53, 23.5, 10 ), 20, 20, 30 ) A = (1,3) 1.5300 (2,4) 3.9711 (3,5) 6.4122 (4,6) 8.8533 (5,7) 11.2944 (6,8) 13.7356 (7,9) 16.1767 (8,10) 18.6178 (9,11) 21.0589 (10,12) 23.5000
If you do not intend to change any values in a matrix, the last argument need not be specified, in which case, it will allocate as room for as many objects as there are in the initial three vectors.
>> A = sparse( 1:10, 3:13, linspace( 1.53, 23.5, 10 ), 20, 20 ); % same as sparse( 1:10, 3:13, linspace( 1.53, 23.5, 10 ), 20, 10 )
Unfortunately, if you now assign one more value, e.g., A(1,1) = 3, it must allocate an new larger block of memory. It will double the number of stored elements, so this memory allocation will not need to be performed at each new allocation. Consider:
>> A = sparse( 1:10, 2:11, 3:12, 20, 20, 12 ); >> B = sparse( 1:10, 2:11, 3:12, 20, 20 ); % defaults to storing 10 objects >> whos Name Size Bytes Class A 20x20 228 sparse array B 20x20 204 sparse array Grand total is 22 elements using 432 bytes >> A(1,5) = 3; >> B(1,5) = 3; >> whos Name Size Bytes Class A 20x20 228 sparse array B 20x20 324 sparse array Grand total is 32 elements using 552 bytes
Note that the space allocated for matrix B has jumped to size 324.
Converting a matrix into a sparse matrix is as easy as:
>> D = diag( 5:20 ); >> sparse( D );
You can find out about sparse functions by entering help sparfun at the prompt. Some examples are speye (a sparse eye function), eigs (a sparse eigenvalue function), normest (find an estimate of the norm), and condest (find an estimate of the condition number.)