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 |