LAPACK (Linear Algebra PACKage) and ARPACK (ARnoldi PACKage) are collections of Fortran routines for efficiently solving large matrix diagonalization problems. Since I do my programming in C++, I have worked on defining function calls for simple and efficient use in C++ programs. LAPACK is useful for dense matrices, and requires as input the full matrix; ARPACK, on the other hand, is designed for sparse matrices and requires that the user define his own matrix multiplication function.
Note that these header files are not sufficient to use the routines; the machine on which the program is compiled and run must have the LAPACK and ARPACK packages installed. These packages are available for download for both LAPACK and ARPACK, along with more information about the miriad extant routines and the methods implemented therein.
As I write more header files, I will include them here. The files contain documentation on the function calls. Each works to find the eigenvalues and, optionally, the eigenvectors for a real matrix, working at double precision. I have also written simple C++ programs that use these routines. For now, these are the available files: