% Copyright The Numerical Algorithms Group Limited 1992-94. All rights reserved.
% !! DO NOT MODIFY THIS FILE BY HAND !! Created by ht.awk.
\newcommand{\PermanentXmpTitle}{Permanent}
\newcommand{\PermanentXmpNumber}{9.66}
%
% =====================================================================
\begin{page}{PermanentXmpPage}{9.66 Permanent}
% =====================================================================
\beginscroll

%
%
%
%
%


The package \spadtype{Permanent} provides the function
\spadfunFrom{permanent}{Permanent} for square matrices.
%-% \HDindex{matrix!permanent of}{PermanentXmpPage}{9.66}{Permanent}
The \spadfunFrom{permanent}{Permanent} of a square matrix can be computed
in the same way as the determinant by expansion of minors except that for
the permanent the sign for each element is \spad{1}, rather than being
\spad{1} if the row plus column indices is positive and \spad{-1}
otherwise.
This function is much more difficult to compute efficiently than the
\spadfunFrom{determinant}{Matrix}.
An example of the use of \spadfunFrom{permanent}{Permanent} is the
calculation of the \eth{\spad{n}} derangement number, defined to be the number
of different possibilities for \spad{n} couples to dance but never with
their own spouse.
\xtc{
Consider an \spad{n} by \spad{n} matrix with entries \spad{0} on the diagonal and
\spad{1} elsewhere.
Think of the rows as one-half of each couple (for example, the males) and the
columns the other half.
The permanent of such a matrix gives the desired derangement number.
}{
\begin{spadsrc}[\bound{kn}]
kn n ==
  r : MATRIX INT := new(n,n,1)
  for i in 1..n repeat
      r(i, i) := 0
  r
\end{spadsrc}
}
\xtc{
Here are some derangement numbers, which you see grow quite fast.
}{
\spadpaste{permanent(kn(5) :: SQMATRIX(5,INT)) \free{kn}}
}
\xtc{
}{
\spadpaste{[permanent(kn(n) :: SQMATRIX(n,INT)) for n in 1..13] \free{kn}}
}
\endscroll
\autobuttons
\end{page}
%
