0

Given a Hessenberg matrix, i wish to compute its eigenvalues using QR Algorithm.

The problem is that the matrix has complex eigenvalues and my implementation of the QR Algorithm can't find them.

It sucessfully finds the eigenvalues that have only real part, but the matrix never finds complex eigenvalues.

How can I proceed? Is there a version of QR Algorithm that does it? Is there a paper or book that may help me?

Example of matrix:

array([[-4.64628998e+03+0.j, -5.68688457e+02+0.j,  2.71866272e+02+0.j,
    -7.00797089e+01+0.j, -4.64131909e+02+0.j],
   [ 3.75304668e+04+0.j,  4.64667849e+03+0.j, -2.45500711e+03+0.j,
     3.80887022e+02+0.j,  4.00162200e+03+0.j],
   [ 0.00000000e+00+0.j,  5.26447278e+02+0.j, -5.54565702e+01+0.j,
    -8.12474922e+01+0.j,  6.47352607e+01+0.j],
   [ 0.00000000e+00+0.j,  0.00000000e+00+0.j,  2.77255195e+03+0.j,
     6.41617510e+01+0.j, -2.95459594e+03+0.j],
   [ 0.00000000e+00+0.j,  0.00000000e+00+0.j,  0.00000000e+00+0.j,
     5.14603305e+02+0.j, -1.65955603e+01+0.j]])

1 Answers1

2

The QR algorithm converges to a Schur form of the matrix.

If the matrix is real, then the Schur form is a quasi-triangular matrix with diagonal blocks which are either 1-by-1 or 2-by-2. Every block which is 1-by-1 specifies a single real eigenvalue and every block which is 2-by-2 specifies a pair of complex conjugate eigenvalues.

If the matrix is complex, then the Schur form is upper triangular and the eigenvalues can be read off directly from the diagonal.

It is quite possible that your current implementation is correct. You merely need to add a post-processing stage which identifies any 2-by-2 diagonal blocks along the diagonal and computes the corresponding complex eigenvalues.

Carl Christian
  • 12,583
  • 1
  • 14
  • 37