Block Diagonalizing an antisymmetric matrix

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?

Thanks!

-
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

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:

http://www.cs.cornell.edu/courses/CS6210/2010fa/A6/A6.pdf

http://math.stackexchange.com/a/167191/3111

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

endfor

endfunction


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.

-

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

[Q, T] = hess(A)

-