### MF64 Permute and scale a sparse complex unsymmetric matrix to put large
entries on the diagonal

Given a sparse complex matrix $A$
= ${\left\{{a}_{ij}\right\}}_{n\times n}$, this
subroutine attempts to ﬁnd a column permutation vector that makes the permuted matrix
have $n$
entries on its diagonal. If the matrix is structurally nonsingular, the subroutine
optionally returns a column permutation that maximizes the smallest modulus of an
entry on the diagonal, maximizes the sum of the moduli of the diagonal entries, or
maximizes the product of the moduli of the diagonal entries of the permuted matrix.
For the latter option, the subroutine also ﬁnds scaling factors that may be used to
scale the original matrix so that the diagonal entries of the permuted and scaled
matrix are one in absolute value and all the oﬀ-diagonal entries are less than or
equal to one in absolute value. The natural logarithms of the scaling factors
${u}_{i}$,
$i=1,...,n$, for the
rows and ${v}_{j}$,
$j=1,...,n$,
for the columns are returned so that the scaled matrix
$B$ =
${\left\{{b}_{ij}\right\}}_{n\times n}$ has
entries

$${b}_{ij}={a}_{ij}exp\left({u}_{i}+{v}_{j}\right).$$