Block diagonalize a matrix

9 views (last 30 days)
Ben Petschel
Ben Petschel on 8 Jun 2011
Given a square matrix A and a rectangular matrix V, how do we find a complement U such that [U,V]\A*[U,V] is block diagonal?
For simplicity assume that V does not break any Jordan chains (i.e. v is in the span of V if and only if Av is in the span of V) so that the block sizes correspond to the number of columns of U and V. Here it would be enough to find a U such that [U,V] is invertible and A*U=U*C for some matrix C.
An interesting example that arises in probability theory is to calculate the limit B=(t-1)*inv(tI-A) as t->1 where A has a complete set of eigenvectors for 1. Considering the Jordan form of the matrix, A=W*blkdiag(J,I)/W, where 1 is not in eig(J), it's not hard to show that B=W*blkdiag(O,I)/W where O=zeros(size(J)). However the Jordan form is not numerically stable and we don't need all of it anyway.
The approach I'd prefer to use is to calculate V=null(A-I) and find the complement U that block diagonalizes A, which gives a similar expression for B.
Small example:
A=[0,0,0;1/2,1,0;1/2,0,1];
% Jordan method (works for small examples):
[W,J]=jordan(A);
J(J~=1 | ~eye(size(J)))=0;
B = W*J/W; % here B=A
% Block diagonalization (computed partly by hand, wish to generalize):
V=null(A-eye(size(A)));
U=[1;-1/2;-1/2]; % in general U=???
B=[U,V]*diag([zeros(1,size(U,2)),ones(1,size(V,2))])/[U,V]; % here B=A

Answers (1)

Ben Petschel
Ben Petschel on 19 Jun 2011
It turns out to be easier than I thought. Given V such that A*V=V*E we find any W such that [W,V] is invertible and if A*W = W*F+V*G (i.e. [W,V]\A*[W,V] = [E,0;F,G] then setting U=W-V*X we solve the Sylvester equation E*X-X*F=G using lyap() and [U,V] block-diagonalizes A.

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!