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.