Joint diagonalization.


The joint diagonalization of a set of square matrices consists in finding the orthonormal change of basis which makes the matrices as diagonal as possible. When all the matrices in the set commute, this can be achieved exactly. When this is not the case, it is always possible to optimize a joint diagonality criterion. This defines an approximate joint diagonalization. When the matrices in the set are `almost exactly jointly diagonalizable', this approach also defines something like the `average eigen-spaces' of the matrix set.

There is a reasonable algorithm for the joint diagonalization of a set of matrices, real or complex, self-adjoint or not, because the Jacobi method can be easily extended: we have found a trick by which the Givens angles used in the plane rotations of the Jacobi method can be readily obtained.

We make available the following material regarding joint diagonalization.

  1. Code
    1. Matlab/Octave

      A Matlab/Octave function implementing the joint approximate diagonalization of complex matrices (it can also process real matrices, but there are simplifications in this case). As a quick test of what the function does, call it with this little test program

      A a function implementing the joint approximate diagonalization of real matrices (offers some computational savings over the more general complex case).

    2. An implementation in R can be found as a package on CRAN (Comprehensive R archive network) . The package there is called "JADE".

    3. An implementation in C is here.

    4. In Python several implementations over the web. Let me know if you found a good one.
  2. Papers

    The joint diagonalization procedure is described in this reprint of a SIAM article. The reference is

      author       = "Jean-Fran\c{c}ois Cardoso and Antoine Souloumiac",
      journal      = "{SIAM} J. Mat. Anal. Appl.",
      title        = "Jacobi angles for simultaneous diagonalization",
      pages        = "161--164",
      volume       = "17",
      number       = "1",
      month        = jan,
      year         = {1996}}

    We have also described the first-order perturbation of a joint diagonalizer in this technical report which can be referred to as

      author       = "Jean-Fran\c{c}ois Cardoso",
      institution  = "T\'{e}l\'{e}com {P}aris",
      title        = "Perturbation of joint diagonalizers. Ref\# 94D027",
      year         = "1994"}

  3. Application If you are curious about application of joint diagonalization to a signal processing problem, namely blind separation of signals, take a look here.