I have a set of left and right eigenvectors from an nonsymmetric eigenproblem, and I'd like to biorthogonalize them.
I tried Gram-Schmidt, but this fails for most cases.
I then read that the SVD is the best way to get an orthonormal basis for a matrix, where U would be my basis.
How can I extend the SVD to the case of two sets of eigenvectors? Or is there a better way to biorthogonalize my left and right eigenvectors?
EDIT: More details
I have a complex, non-Hermitian matrix,
$\qquad\mathbf{M} = \left[\begin{array}{cc} \mathbf{A} & \mathbf{B} \\ -\mathbf{B^*} & -\mathbf{A^*}\end{array}\right]$
Where $*$ indicates conjugate transpose. I solve via ZGEEV for the left and right eigenvectors, so I have
$\qquad\mathbf{MX_R} = \mathbf{X_RE}\qquad$ and $\qquad \mathbf{X_LM} = \mathbf{EX_L}\qquad$
Where $\mathbf{E}$ is a diagonal matrix of eigenvalues, and $\mathbf{X_L}$ and $\mathbf{X_R}$ are matrices containing my left and right eigenvectors, respectively.
I can easily orthogonalize the right and left eigenvectors among themselves, i.e. $\mathbf{X_R^*}\cdot\mathbf{X_R} = \mathbf{I}$ or $\mathbf{X_L^*}\cdot\mathbf{X_L} = \mathbf{I}$, but what I want is to biorthonormalize them to each other, e.g. obtain:
$\qquad\mathbf{X_L}\cdot\mathbf{X_R} = \mathbf{I}$
I have written my own modified Gram-Schmidt to accomplish this, but like I said, it does not work for many cases. I cannot see any way of using LAPACK routines (i.e. ZGEQRF followed by ZUNGQR) to accomplish this, nor does using the SVD seem apparent to me.