12.4.4. Eigenvectors Following the Schur Decomposition¶
After the Schur decomposition from either the QR or Francis algorithm
using Francis steps of degree one, the Schur vectors, ,
are used when we find the eigenvectors. Only the eigenvectors,
, of the upper triangular matrix
are needed
to compute the eigenvectors of
, which is implemented in
function
UTeigVect
. The final
eigenvectors matrix is found with multiplication.
Again, we need to find the null solution of each characteristic matrix. But the
triangular structure of allows for a more efficient solution
than finding the SVDs. Let
be the
th
characteristic matrix,
. Because the eigenvalues are on the diagonal of
, the
th diagonal element of
is
zero. We will partition
such that
is size
with a zero in the last diagonal position.
(12.7)¶
and
are upper
triangular, while
is square.
is non-singular because all its diagonal
elements are nonzero. Therefore,
must equal zero. So
equation (12.7) is reduced to
. We can further partition
to separate its last row and column from a,
non-singular, upper triangular matrix
.
The solution may then be found with back substitution of the upper
triangular matrix with
.
where ,
, and
. The
th element of the
th eigenvector of
is then given by
Finally, each eigenvector is scaled to a unit vector.
function V = UTeigVect(T)
% UTEIGVECT - Find the eigenvectors of upper triangular matrix T.
% The eigenvalues should be supplied on the diagonal of T.
% The structure of T allows finding the eigenvectors with triangular
% back substitution rather than as the null solution of the
% characteristic equation.
n = size(T,2);
V = eye(n);
I = eye(n);
for k = 2:n
C = T - T(k,k)*I;
S = C(1:k-1, 1:k-1);
r = C(1:k-1, k);
% solve with triangular back substitution
V(1:k-1, k) = -S/r;
V(1:k, k) = V(1:k, k)/norm(V(1:k, k));
end
end
Note
To test the correctness of the eigendecomposition, the MATLAB command
A*X - X*L
should produce a matrix with values close to zero. The
eigenvalues should be the same as returned from MATLAB’s eig
function. However, complex eigenvectors can be different and still be
correct because they may be multiplied by a complex scalar.
Eigenvectors are invariant to scale. That is to say that if
is an eigenvector of
, so is
where
is any scalar constant. For
convenience to users, functions that return eigenvectors should
always return unit length vectors. For real eigenvectors, two
different functions might return vectors multiplied by -1 of each
other. That is easy to detect. But complex eigenvectors could be
multiplied by any unit length number on the complex plane
(
) where
. Thus, two correct sets
of eigenvectors can appear different. Instead, enter the command
norm(A*X - X*L, ’fro’)
, which will return a number close to zero
if the eigenvalues and eigenvectors are correct.