MATLAB Function Reference | Search  Help Desk |
spdiags | Examples See Also |
Extract and create sparse band and diagonal matrices
[B,d] = spdiags(A) B = spdiags(A,d) A = spdiags(B,d,A) A = spdiags(B,d,m,n)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
.
If a column of B
is longer than the diagonal it's replacing, spdiags
takes elements from B
's tail.
The spdiags
function deals with three matrices, in various combinations, as both input and output:A
, B
, and d
are related by
for k = 1:p B(:,k) = diag(A,d(k)) endSome 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.
This example generates a sparse tridiagonal representation of the classic second difference operator on n
points.
e = ones(n,1); A = spdiags([e -2*e e], -1:1, n, n)Turn it into Wilkinson's test matrix (see
gallery)
:
A = spdiags(abs(-(n-1)/2:(n-1)/2)',0,A)Finally, recover the three diagonals:
B = spdiags(A)The second example is not square.
A = [11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 0 52 0 0 0 0 63 0 0 0 0 74]Here
m
=
7,
n
=
4,
and p
=
3
.
The statement [B,d]
=
spdiags(A)
produces d
=
[-3
0
2]'
and
B = [41 11 0 52 22 0 63 33 13 74 44 24]Conversely, with the above
B
and d
, the expression spdiags(B,d,7,4)
reproduces the original A
.
diag
Diagonal matrices and diagonals of a matrix