Block diagonalize a matrix

11 次查看(过去 30 天)
Ben Petschel
Ben Petschel 2011-6-8
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

回答(1 个)

Ben Petschel
Ben Petschel 2011-6-19
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.

类别

Help CenterFile Exchange 中查找有关 Linear Algebra 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by