Sign up ×

I was wondering how to block diagonalize a $10\times10$ antisymmetric matrix into block matrices along the diagonal. Can I just diagonalize each non-diagonal block?


share|cite|improve this question
The problem here could stand clarification. The last part is easy, if I understand it correctly: If you have a block diagonal matrix, then you can diagonalize it by diagonalizing each block separately. However in the subject line you use "antisymmetric" to describe the matrix, suggesting that the (real?) matrix will have imaginary eigenvalues and involve some complex arithmetic if you want to diagonalize it. See real Jordan canonical form for a discussion of using a block diagonal real matrix (with 2x2 blocks). – hardmath Jul 5 '12 at 13:39
yeah, it's an antisymmetric matrix and it will probably have compex eigenvalues. so, my question is how to put it in block diagonal form. Thanks! – user34801 Jul 5 '12 at 13:48

2 Answers 2

up vote 4 down vote accepted

Without knowing what level of understanding you're looking for, I'm going to respond with some high level remarks. Feel free to ask for clarification if something strikes your interest.

A widely referenced work for eigenvalue and decomposition algorithms is Golub and van Loan's Matrix Computations (3rd ed., 1996), and Chapter 7 ("The Unsymmetric Eigenvalue Problem") in particular. In Sec. 7.4 you would read about the real Schur decomposition in which real matrix $A$ can be factored as $Q^T T Q$ where $Q$ is orthogonal and $T$ is quasi-triangular (block upper triangular such that the diagonal blocks are either $1\times1$ or $2\times2$ blocks). Hereafter we may refer to sections of this book by prefixing GvL to the section numbers.

In your case there is special structure in that $A$ is real(?) antisymmetric (or skew symmetric as many prefer), and its eigenvalues will occur in purely imaginary conjugate pairs. Thus the matrix is orthogonally similar to a block diagonal form with $2\times2$ blocks like:

$$ \begin{pmatrix} 0 & \sigma_i \\ -\sigma_i & 0 \end{pmatrix} $$

It is natural to ask if structure-preserving algorithms will have any special advantage in speed or accuracy, and the answer seems to be yes.

Note that the related matrix $iA$ is Hermitian, and by standard direct algorithms (GvL8.3.1 and problem P8.3.5 at end of section 8.3) is unitarily similar to a real tridiagonal matrix. This suggests there should exist a real orthogonal $Q$ such that $Q^T A Q = T$ is antisymmetric and tridiagonal (and thus has all zeros on the diagonal). Such a direct computation is the first problem in this course assignment (see also problem GvL8.3 P8.3.8).

As it happens, M. Wimmer in Efficient numerical computation of the Pfaffian for dense and banded skew-symmetric matrices (2011) connects the tridiagonalization of a even-dimensional real antisymmetric matrix with its ("real" Jordan) canonical form (Sec. I.B). Appendix A spells out the details of this connection, which requires the SVD of a bidiagonal matrix easily derived from $T$. Sec. II compares several ways of tridiagonalizing a real antisymmetric matrix, including by the Householder transformations required by the references above.

Here is my quick-and-dirty version of tridiagonalizing real antisymmetric matrices:

    Skew Symmetric Tridiagonalization

    Real skew symmetric matrix A can be reduced by direct
    orthogonal (Householder) transformations to a similar
    tridiagonal skew symmetric matrix T.

    The implementation below using Octave (Matlab) syntax is
    motivated by this course assigment, though lacking its
    thoughtful performance optimizations:

    See also Golub & van Loan (3rd ed.) as in my answer here:

    Copyright Chip Eastham, July 2012, and dual licensed under
    GNU GPLv3, see
    or CC-Wiki, see
    with attribution/share-alike required per StackExchange policy.

function [Q, T] = SkewReduce (A)

# usage: [Q, T] = SkewReduce (A)
#   A  :  real skew symmetric (square) matrix
# returning:
#   Q  :  real orthogonal matrix s.t. A = QTQ' where
#   T  :  tridiagonal real skew symmetric matrix

   n = size(A,1);  % assume n > 2 (done if n =< 2)
   Q = eye(n);     % initialize to accumulate product
   T = A;          % copy of A to be tridiagonalized

   for k = 1:n-2
      v = T(k+1:n,k);
      r = norm(v);
      v(1) = v(1) + r;
      q = v' * v;
      P = blkdiag(eye(k),eye(n-k) - (2/q)*v*v');
      Q = P*Q;
      T = P*T*P;   % because P is symmetric orthogonal



A brief test case is this:

octave:3> A = [0,2,-1;-2,0,-4;1,4,0]
A =

   0   2  -1
  -2   0  -4
   1   4   0

octave:4> [Q,T] = SkewReduce(A)
Q =

   1.00000   0.00000   0.00000
   0.00000   0.89443  -0.44721
   0.00000  -0.44721  -0.89443

T =

   0.00000   2.23607  -0.00000
  -2.23607  -0.00000   4.00000
   0.00000  -4.00000   0.00000

Note that this tridiagonalization does not depend on matrix size being even.

share|cite|improve this answer

The above procedure is equivalent to the Hessenberg transformation and may be achieved in Matlab using

[Q, T] = hess(A)

share|cite|improve this answer

Your Answer


