# bandwidth

Lower and upper matrix bandwidth

## Syntax

• `B = bandwidth(A,type)` example
• ```[lower,upper] = bandwidth(A)``` example

## Description

example

````B = bandwidth(A,type)` returns the bandwidth of matrix `A` specified by `type`. Specify `type` as `'lower'` for the lower bandwidth, or `'upper'` for the upper bandwidth.```

example

``````[lower,upper] = bandwidth(A)``` returns the lower bandwidth, `lower`, and upper bandwidth, `upper`, of matrix `A`.```

## Examples

collapse all

### Find Bandwidth of Triangular Matrix

Create a 6-by-6 lower triangular matrix.

`A = tril(magic(6))`
```A = 35 0 0 0 0 0 3 32 0 0 0 0 31 9 2 0 0 0 8 28 33 17 0 0 30 5 34 12 14 0 4 36 29 13 18 11 ```

Find the lower bandwidth of `A` by specifying `type` as `'lower'`.

`B = bandwidth(A,'lower')`
```B = 5```

The result is 5 because every diagonal below the main diagonal has nonzero elements.

Find the upper bandwidth of `A` by specifying `type` as `'upper'`.

`B = bandwidth(A,'upper')`
```B = 0```

The result is 0 because there are no nonzero elements above the main diagonal.

### Find Bandwidth of Sparse Block Matrix

Create a 100-by-100 sparse block matrix.

`B = kron(speye(25),ones(4));`

View a 10-by-10 section of elements from the top left of `B`.

`full(B(1:10,1:10))`
```ans = 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1```

`B` has 4-by-4 blocks of ones centered on the main diagonal.

Find both the lower and upper bandwidths of `B` by specifying two output arguments.

`[lower,upper] = bandwidth(B)`
```lower = 3 upper = 3 ```

The lower and upper bandwidths are both `3`.

## Input Arguments

collapse all

### `A` — Input matrix2-D numeric matrix

Input matrix, specified as a 2-D numeric matrix. `A` can be either full or sparse.

Data Types: `single` | `double`
Complex Number Support: Yes

### `type` — Bandwidth type`'lower'` | `'upper'`

Bandwidth type, specified as `'lower'` or `'upper'`.

• Specify `'lower'` for the lower bandwidth (below the main diagonal).

• Specify `'upper'` for the upper bandwidth (above the main diagonal).

Data Types: `char`

## Output Arguments

collapse all

### `B` — Lower or upper bandwidthnonnegative integer scalar

Lower or upper bandwidth, returned as a nonnegative integer scalar.

• If `type` is `'lower'`, then `0` ≤ `B` ≤ `size(A,1)-1`.

• If `type` is `'upper'`, then `0` ≤ `B` ≤ `size(A,2)-1`.

### `lower` — Lower bandwidthnonnegative integer scalar

Lower bandwidth, returned as a nonnegative integer scalar. `lower` is in the range `0` ≤ `lower` ≤ `size(A,1)-1`.

### `upper` — Upper bandwidthnonnegative integer scalar

Upper bandwidth, returned as a nonnegative integer scalar. `upper` is in the range `0` ≤ `upper` ≤ `size(A,2)-1`.

collapse all

### Upper and Lower Bandwidth

The upper and lower bandwidths of a matrix are measured by finding the last diagonal (above or below the main diagonal, respectively) that contains nonzero values.

That is, for a matrix A with elements Aij:

• The upper bandwidth B1 is the smallest number such that ${A}_{ij}=0$ whenever $j-i>{B}_{1}$.

• The lower bandwidth B2 is the smallest number such that ${A}_{ij}=0$ whenever $i-j>{B}_{2}$.

Note that this measurement does not disallow intermediate diagonals in a band from being all zero, but instead focuses on the location of the last diagonal containing nonzeros. By convention, the upper and lower bandwidths of an empty matrix are both zero.