A Schur-Parlett algorithm for computing matrix functions

Philip I. Davies, Nicholas J. Higham

    Research output: Contribution to journalArticlepeer-review

    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 funm in MATLAB 6.5 (R13).
    Original languageEnglish
    Pages (from-to)464-485
    Number of pages21
    JournalSIAM Journal on Matrix Analysis and Applications
    Volume25
    Issue number2
    DOIs
    Publication statusPublished - 2004

    Keywords

    • LAPACK
    • MATLAB
    • Matrix cosine
    • Matrix exponential
    • Matrix function
    • Matrix logarithm
    • Parlett recurrence
    • Schur decomposition
    • Sep function
    • Taylor series

    Fingerprint

    Dive into the research topics of 'A Schur-Parlett algorithm for computing matrix functions'. Together they form a unique fingerprint.

    Cite this