MATLAB Function Reference | ![]() ![]() |
Extract and create sparse band and diagonal matrices
Syntax
Description
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
.
Arguments
The spdiags
function deals with three matrices, in various combinations, as both input and output.
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.
Examples
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.
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.
B = repmat((1:6)',[1 7]) B = 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 6 d = [-4 -2 -1 0 3 4 5]; A = spdiags(B,d,6,6); full(A) ans = 1 0 0 4 5 6 1 2 0 0 5 6 1 2 3 0 0 6 0 2 3 4 0 0 1 0 3 4 5 0 0 2 0 4 5 6
See Also
![]() | spconvert | speye | ![]() |