MATLAB Function Reference    

Extract and create sparse band and diagonal matrices



The spdiags function generalizes the function diag. Four different operations, distinguished by the number of input arguments, are possible:

[B,d] = spdiags(A) extracts all nonzero diagonals from the m-by-n matrix A. B is a min(m,n)-by-p matrix whose columns are the p nonzero diagonals of A. d is a vector of length p whose integer components specify the diagonals in A.

B = spdiags(A,d) extracts the diagonals specified by d.

A = spdiags(B,d,A) replaces the diagonals specified by d with the columns of B. The output is sparse.

A = spdiags(B,d,m,n) creates an m-by-n sparse matrix by taking the columns of B and placing them along the diagonals specified by d.


The spdiags function deals with three matrices, in various combinations, as both input and output.

An m-by-n matrix, usually (but not necessarily) sparse, with its nonzero or specified elements located on p diagonals.
A min(m,n)-by-p matrix, usually (but not necessarily) full, whose columns are the diagonals of A.
A vector of length p whose integer components specify the diagonals in A.

Roughly, A, B, and d are related by

Some elements of B, corresponding to positions outside of A, are not defined by these loops. They are not referenced when B is input and are set to zero when B is output.


Example 1. This example generates a sparse tridiagonal representation of the classic second difference operator on n points.

Turn it into Wilkinson's test matrix (see gallery):

Finally, recover the three diagonals:

Example 2. The second example is not square.

Here m = 7, n = 4, and p = 3.

The statement [B,d] = spdiags(A) produces d = [-3 0 2]' and

Conversely, with the above B and d, the expression spdiags(B,d,7,4) reproduces the original A.

Example 3. This example shows how spdiags creates the diagonals when the columns of B are longer than the diagonals they are replacing.

See Also


  spconvert speye