# dmperm

## Purpose

Dulmage-Mendelsohn decomposition of a matrix.

## Synopsis

    p = dmperm(A)
    [p,q,r] = dmperm(A)
    [p,q,r,s] = dmperm(A)

## Description

`p = dmperm(A)` returns a maximum matching; if `A` has full column rank then `A(p,:)` is square with nonzero diagonal.

If `A` is a reducible matrix, the linear system Ax = b can be solved by permuting `A` to a block upper triangular form, with irreducible diagonal blocks, and then performing block backsubstitution. Only the diagonal blocks of the permuted matrix need to be factored, saving fill and arithmetic in the above diagonal blocks.

`[p,q,r] = dmperm(A)`, where `A` is a square matrix, finds a row permutation `p` and a column permutation `q` so that `A(p,q)` is in block upper triangular form. The third output argument `r` is an integer vector describing the boundaries of the blocks: the `k`-th block of `A(p,q)` has indices `r(k):r(k+1)-1`.

`[p,q,r,s] = dmperm(A)`, where `A` is not square, finds permutations `p` and `q` and index vectors `r` and `s` so that `A(p,q)` is block upper triangular. The blocks have indices.

    (r(i):r(i+1)-1, s(i):s(i+1)-1).

In graph theoretic terms, the diagonal blocks correspond to strong Hall components of the adjacency graph of `A`.

## See Also

    sprank

(c) Copyright 1994 by The MathWorks, Inc.