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