Abstract

An algorithm for computing matrix functions is presented. It employs a Schur
decomposition with reordering and blocking followed by the block form of a
recurrence of Parlett, with functions of the nontrivial diagonal blocks
evaluated via a Taylor series. A parameter is used to balance the conflicting
requirements of producing small diagonal blocks and keeping the separations of
the blocks large. The algorithm is intended primarily for functions having a
Taylor series with an infinite radius of convergence, but it can be adapted for
certain other functions, such as the logarithm. Novel features introduced here
include a convergence test that avoids premature termination of the Taylor
series evaluation and an algorithm for reordering and blocking the Schur form.
Numerical experiments show that the algorithm is competitive with existing
special-purpose algorithms for the matrix exponential, logarithm, and cosine.
Nevertheless, the algorithm can be numerically unstable with the default choice
of its blocking parameter (or in certain cases for all choices), and we explain
why determining the optimal parameter appears to be a very difficult problem. A
MATLAB implementation is available that is much more reliable than the function
\texttt{funm} in MATLAB~6.5 (R13).