Let $\Sigma_1$, $\Sigma_2$ be symmetric positive-definite real $n\times n$ matrices. We want to solve the generalized eigenvalue problem $$ \Sigma_1V=\Lambda\Sigma_2V, $$ where $\Lambda$ is the generalized eigenvalue matrix and $V$ the generalized eigenvector matrix.

I am particularly interested in computing the eigenvalues. Also, I am looking for a c-friendly solution. I am going to use the GNU Scientific Library (GSL), and thus I don't want to do unnecessary computations. That's why I ask here. Thank you very much in advance!


By applying Cholesky decomposition on $\Sigma_2$, we have $\Sigma_2=LL^\top$, where $L$ is a lower triangle matrix. Then, the desired eigenvalues can be found by solving a "simpler" eigenvalue problem. That is, the desired eigenvalues coincide with the eigenvalues of the following matrix $$ L^{-1}\Sigma_1(L^\top)^{-1}. $$

What would be a good programming practice here? Should I first compute $L$ (using Cholesky), and after that conducting the triple multiplication, and finally find the eigenvalues (using a GSL solver)? Or is there any simplifications that would make the total computation cost smaller?

  • $\begingroup$ Why does not gsl_eigen_gensymm suit your goals? $\endgroup$ – uranix Jun 16 '15 at 17:42
  • $\begingroup$ Well, it does suit indeed! I only found out a few hours after asking... I should have been looking for that a bit more carefully and patiently... Thanks @uranix! $\endgroup$ – nullgeppetto Jun 16 '15 at 19:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.