Routines for the diagonalization of complex matrices

This site hosts a set of routines for the eigenvalue decomposition, singular value decomposition, and Takagi factorization of a complex matrix. Unlike many other implementations, the current ones are all based on the Jacobi algorithm, which makes the code very compact but suitable only for small to medium-sized problems.

Although distributed as a library, the routines are self-contained and can easily be taken out of the library and included in own code, removing yet another installation prerequisite. Owing to the small size of the routines it is possible, in fact quite straightforward, to adapt the diagonalization routine to one's own conventions rather than vice versa.

The following routines are included:

These are implemented as compact (some 3 kB each) Fortran 77 or C subroutines in a freely available library. Free does not just mean you don't have to pay, it means in particular that you are free to distribute the routines with your own code, modify it, etc., within the limits of the LGPL.

The routines have been published in physics/0607103.

You can download the following files:

To install the package, unpack the archive, change into the newly created directory Diag-n.m and type ./configure, make, and make install there. See also the README file for more detailed instructions.

A PDF file with the manual is contained in the distribution. It can also be downloaded directly: manual.pdf [117 kB, MD5: d935d2ef9528abd72b02eab52a8dcb08].

Thanks for looking in.

Please send bug reports, suggestions, fan mail, etc. to Thomas Hahn,

This site and the programs offered here are not commercial. The Diag package is and will stay an open-source package and free of charge. If you want to use these routines in a commercial application, make sure you understand the GNU Lesser General Public License under which Diag is distributed. Diag is being developed at the Max-Planck-Institute for Physics in Munich.

Last update: 3 Nov 15 Thomas Hahn