# NAME

diagonalize_2 - Diagonalizes a matrix
# SYNOPSIS

#include "n/n_diagonalize.h"
Example compile flags (system dependent):
-DLINUX_X86_64 -DLINUX_X86_64_OPTERON -DGNU_COMPILER
-I/home/kobus/include
-L/home/kobus/misc/load/linux_x86_64_opteron -L/usr/lib/x86_64-linux-gnu
-lKJB -lfftw3 -lgsl -lgslcblas -ljpeg -lSVM -lstdc++ -lpthread -lSLATEC -lg2c -lacml -lacml_mv -lblas -lg2c -lncursesw
int diagonalize_2
(
const Matrix *mp,
Matrix **E_re_mpp,
Matrix **E_im_mpp,
Vector **D_re_vpp,
Vector **D_im_vpp
);

# DESCRIPTION

Given a matrix A, this routine computes A = E*D*inv(E), where D is diagonal,
and contains the eigenvalues of A, and the columns of E contain the
eigenvectors. If A is symmetric, then the eigenvalues are real. However, if
this is the case, then use the routine diagonalize_symmetric(). If
A is non-symmetric, but the eigenvalues are expected to be real regardless,
then use the routine diagonalize(). In general, this routine assumes that all
quantities may be complex.
The matrix of eigenvectors is put into the matrix pointed to by *E_re_mpp and
*E_im_mpp which are created or resized as needed. The diagonal matrix of
eigenvalues is put into the vectors pointed to by *D_re_vpp and *D_im_vpp,
which are also created or resized as needed. If any of these quantities are
not needed, the arguments may be set to NULL.
# RETURNS

NO_ERROR on success, and ERROR on failure, with an appropriate error
message being set.
# NOTE

Unlike diagonalize() and diagonalize_symmetric() this routine does NOT
sort eigenvalues/eigenvectors.
# NOTE

Technically, we compute the "right" eigenvectors. If needed, this routine
could be trivially modified to provide another diagonalization routine,
diagonalize_3() which could provide, both "left" and "right"
eigenvectors.
# NOTE

This routine requires that that the LAPACK library is available. If this
file was compiled without the presence of that library, then this routine
will return ERROR.
# DISCLAIMER

This software is not adequatedly tested. It is recomended that
results are checked independantly where appropriate.
# AUTHOR

Kobus Barnard
# DOCUMENTER

Kobus Barnard
# SEE ALSO

diagonalize
,
diagonalize_symmetric