MATLAB Function Reference |

Sparse column minimum degree permutation

**Syntax**

**Description**

```
p = colmmd(S)
```

returns the column minimum degree permutation vector for the sparse matrix `S`

. For a nonsymmetric matrix `S`

, this is a column permutation `p`

such that `S(:,p)`

tends to have sparser LU factors than `S`

.

The `colmmd`

permutation is automatically used by `\`

and `/`

for the solution of nonsymmetric and symmetric indefinite sparse linear systems.

Use `spparms`

to change some options and parameters associated with heuristics in the algorithm.

**Algorithm**

The minimum degree algorithm for symmetric matrices is described in the review paper by George and Liu [1]. For nonsymmetric matrices, the MATLAB minimum degree algorithm is new and is described in the paper by Gilbert, Moler, and Schreiber [2]. It is roughly like symmetric minimum degree for `A'*A`

, but does not actually form `A'*A`

.

Each stage of the algorithm chooses a vertex in the graph of `A'*A`

of lowest degree (that is, a column of `A`

having nonzero elements in common with the fewest other columns), eliminates that vertex, and updates the remainder of the graph by adding fill (that is, merging rows). If the input matrix `S`

is of size `m`

-by-`n`

, the columns are all eliminated and the permutation is complete after `n`

stages. To speed up the process, several heuristics are used to carry out multiple stages simultaneously.

**Examples**

The Harwell-Boeing collection of sparse matrices and the MATLAB demos directory include a test matrix WEST0479. It is a matrix of order 479 resulting from a model due to Westerberg of an eight-stage chemical distillation column. The spy plot shows evidence of the eight stages. The colmmd ordering scrambles this structure.

Comparing the spy plot of the LU factorization of the original matrix with that of the reordered matrix shows that minimum degree reduces the time and storage requirements by better than a factor of 2.8. The nonzero counts are 16777 and 5904, respectively.

**See Also**

`colamd`

, `colperm`

, `lu`

, `spparms`

, `symamd`

, `symmmd`

, `symrcm`

The arithmetic operator `\`

**References**

[1] George, Alan and Liu, Joseph, "The Evolution of the Minimum Degree
Ordering Algorithm," *SIAM Review*, 1989, 31:1-19.

[2] Gilbert, John R., Cleve Moler, and Robert Schreiber, "Sparse Matrices in
MATLAB: Design and Implementation," *SIAM Journal on Matrix Analysis
and Applications 13*, 1992, pp. 333-356.

colamd | colorbar |