.. $Id: denseqr.rst 3511 2010-03-22 15:54:32Z lsaavedr $

.. include:: ../replaces.txt

.. highlightlang:: c++

.. _gmm-denseqr:

Dense QR factorisation, eigenvalues and eigenvectors
====================================================


The following procedures are available in the file ``gmm/gmm\_dense\_qr.h`` for dense real and complex matrices::


  gmm::qr_factor(M, Q, R) // compute the QR factorization of M in Q and R
                          // (Householder version)

  implicit_qr_algorithm(M, eigval, double tol = 1E-16) // compute the
     // eigenvalues of M using the implicit QR factorisation (Householder and
     // Francis QR step version). eigval should be a vector of appropriate size
     // in which the eigenvalues will be computed. If the matrix have 
     // complex eigenvalues, please use a complex vector.

  implicit_qr_algorithm(M, eigval, shvect, double tol = 1E-16) // idem, 
     // compute additionally the schur vectors in the matrix shvect.

  symmetric_qr_algorithm(M, eigval, double tol = 1E-16) // idem for symmetric
     // real and hermitian complex matrices (based on Wilkinson QR step)

  symmetric_qr_algorithm(M, eigval, eigvect, double tol = 1E-16) // idem,
     // compute additionally the eigenvectors in the matrix eigvect.



`Remark`: The computation of eigenvectors for non hermitian matrices is not yet implemented. You can use for the moment the functions ``geev_interface_left`` and ``geev_interface_right`` from the LAPACK interface (see ``gmm/gmm_lapack_interface.h``. These LAPACK functions compute right and left eigen vectors. 
                   

The following function defined in the file ``gmm/gmm\_condition\_number.h``::

   gmm::condition_number(M)

compute the condition number of a matrix ``M``. This function uses a dense QR algorithm and thus is only usable for dense matrices.
