# sprank

Structural rank

## Syntax

``r = sprank(A)``

## Description

example

````r = sprank(A)` calculates the structural rank of sparse matrix `A`.```

## Examples

collapse all

Calculate the structural rank of a 2-by-4 matrix.

```A = [1 0 2 0 2 0 4 0]; A = sparse(A); rs = sprank(A)```
```rs = 2 ```

Compare the structural rank to the regular rank calculation.

`rf = rank(full(A))`
```rf = 1 ```

For this matrix, the structural rank is 2 since two of the columns are nonzero. But the actual rank of the matrix is 1 since the columns are multiples of each other.

## Input Arguments

collapse all

Input matrix, specified as a sparse matrix.

Data Types: `double`
Complex Number Support: Yes

collapse all

### Structural Rank

The structural rank of a matrix is the maximum rank of all matrices with the same nonzero pattern. A matrix has full structural rank if it can be permuted so that the diagonal has no zero entries.

The structural rank is an upper bound on the rank of a matrix, so it satisfies `sprank(A) >= rank(full(A))`.

Here are some definitions of the structural rank in terms of other functions:

• The structural rank is a "maximum matching" and is related to the Dulmage-Mendelsohn decomposition by ```sprank(A) = sum(dmperm(A)>0)```.

• Unlike `dmperm`, the `matchpairs` function also takes weights into account when it calculates matches. You can calculate a maximum matching by converting the matrix to 1s and 0s and maximizing the weight of the matches with `matchpairs(double(A~=0),0,'max')`. The structural rank is then equal to the number of matches.