Dear forum users,
I've come across an inexplicable problem with the DGEEVX eigenvalue routine. My interest is in tracer kinetics, where I perform an eigenvalue decomposition for nonsymmetric rate matrices (A) ranging in size from 3x3 to 200x200. I require left (vL) and right (vR) eigenvectors, so that, after normalization, the decomposition matrices can be found (E = vR*vL).
DGEEVX performs well with right eigenvectors, but I have found left eigenvectors to be in error if complex eigenvalues are involved. If all eigenvalues are real, there is no problem.
Here is a simple example:
A =
[-1,1,0]
[0,-1,1]
[1,0,-1]
DGEEVX output is (rounded to three significant figures):
Eigenvalues: (-1.5 + i0.866, -1.5 - i0.866, 0)
The following uses these substitutions: a = 0.289; b = 0.5; c = 0.577.
The (correct) right eigenvector is (in COLUMN-MAJOR form):
vR =
[-a + bi, -a - bi, -c]
[-a - bi, -a + bi, -c]
[ c , c , -c]
The inverse of vR results in the the correct left eigenvectors (in ROW-MAJOR form):
inv(vR) =
[-a - bi, -a + bi, c]
[-a + bi, -a - bi, c]
[-c , -c , -c]
However, this is the (incorrect) output from DGEEVX (in ROW-MAJOR form):
vL =
[-a - bi, c, -a + bi]
[-a + bi, c, -a - bi]
[-c , -c, -c ]
I call DGEEVX from a C program, but I use the correct FORTRAN calling sequence for matrices, and in any case that doesn't explain the results, as I don't think this is a case of a simple transposition (rather, two columns are exchanged). Also, the program works beatifully if eigenvalues are real.
I can hardly believe what I am seeing, as I would think that DGEEVX is among the more widely used routines, but I cannot find an explanation despite close scrutiny of my code and tinkering with options for DGEEVX.
I would greatly appreciate it if someone could replicate the computation and tell me either that I am wrong or that there is a bug in obtaining complex left eigenvectors.
Thanks,
- Dan

