# How can I return real-valued eigenvectors from diagonalization?

1 view (last 30 days)
Jonah Berean-Dutcher on 23 Oct 2020
Answered: Christine Tobler on 23 Oct 2020
This question is a follow-up on my earlier question regarding the diagonalization of skew-symmetric matrices. I am interested in diagonalizing a skew-symmetric matrix, having elements that are only real-valued. Is there a way to ensure that the eigenvectors returned are themselves real-valued? I am wanting to use these eigenvectors to diagonalize a separate matrix that commutes with my skew-symmetric one. This separate matrix, let's call it K, is purely real valued, and I want to keep the problem within a real vector space.
My skew-symmetric matrix,
B = [ ...
0 0 -1 0 0 0 0 0 0 0 0 0; ...
0 0 0 -1 0 0 0 0 0 0 0 0; ...
1 0 0 0 0 0 0 0 0 0 0 0; ...
0 1 0 0 0 0 0 0 0 0 0 0; ...
0 0 0 0 0 0 0 0 0 0 0 0; ...
0 0 0 0 0 0 0 0 0 0 0 0; ...
0 0 0 0 0 0 0 -1 0 -1 0 0; ...
0 0 0 0 0 0 1 0 0 0 -1 0; ...
0 0 0 0 0 0 0 0 0 0 0 -1; ...
0 0 0 0 0 0 1 0 0 0 -1 0; ...
0 0 0 0 0 0 0 1 0 1 0 0; ...
0 0 0 0 0 0 0 0 1 0 0 0];
and when I use the techniques described in the linked post, I get eigenvectors,
>> sym(round(U_B,2))
ans =
[ 0, 71i/100, 0, 0, 0, 0, 0, 0, 71i/100, 0, 0, 0]
[ 0, 0, -71/100, 0, 0, 0, 0, 0, 0, 0, -71/100, 0]
[ 0, 71/100, 0, 0, 0, 0, 0, 0, -71/100, 0, 0, 0]
[ 0, 0, 71i/100, 0, 0, 0, 0, 0, 0, 0, -71i/100, 0]
[ 0, 0, 0, 0, 0, 0, 0, -1i, 0, 0, 0, 0]
[ 0, 0, 0, 0, 0, -1i, 0, 0, 0, 0, 0, 0]
[ 1/2, 0, 0, 0, 0, 0, -71i/100, 0, 0, 0, 0, -1/2]
[-1i/2, 0, 0, 0, 71i/100, 0, 0, 0, 0, 0, 0, -1i/2]
[ 0, 0, 0, -71/100, 0, 0, 0, 0, 0, -71/100, 0, 0]
[-1i/2, 0, 0, 0, -71i/100, 0, 0, 0, 0, 0, 0, -1i/2]
[ -1/2, 0, 0, 0, 0, 0, -71i/100, 0, 0, 0, 0, 1/2]
[ 0, 0, 0, 71i/100, 0, 0, 0, 0, 0, -71i/100, 0, 0]
But this is no good for my purposes, because I want to use these to block-diagonalize the matrix real-valued K:
>> sym(round(K,2))
ans =
[-3/2, -1/2, 0, 0, 0, 0, 0, 0, -1/2, 0, 0, -1/2]
[-1/2, -3/2, 0, 0, 0, 0, 0, 0, 1/2, 0, 0, 1/2]
[ 0, 0, -3/2, -1/2, 0, 0, 0, 0, 1/2, 0, 0, -1/2]
[ 0, 0, -1/2, -3/2, 0, 0, 0, 0, -1/2, 0, 0, 1/2]
[ 0, 0, 0, 0, -1, -1, 1, -1, 0, 1, 1, 0]
[ 0, 0, 0, 0, -1, -1, -1, 1, 0, -1, -1, 0]
[ 0, 0, 0, 0, 1, -1, -1/2, -1/2, 0, 1/2, 3/2, 0]
[ 0, 0, 0, 0, -1, 1, -1/2, -1/2, 0, -3/2, -1/2, 0]
[-1/2, 1/2, 1/2, -1/2, 0, 0, 0, 0, -1, 0, 0, 0]
[ 0, 0, 0, 0, 1, -1, 1/2, -3/2, 0, -1/2, 1/2, 0]
[ 0, 0, 0, 0, 1, -1, 3/2, -1/2, 0, 1/2, -1/2, 0]
[-1/2, 1/2, -1/2, 1/2, 0, 0, 0, 0, 0, 0, 0, -1]
but I don't want this to make K complex, as it does:
>> sym(round(U_B'*K*U_B,2))
ans =
[-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[ 0, -3/2, -1i/2, - 1/2 - 1i/2, 0, 0, 0, 0, 0, 0, 0, 0]
[ 0, 1i/2, -3/2, 1/2 - 1i/2, 0, 0, 0, 0, 0, 0, 0, 0]
[ 0, - 1/2 + 1i/2, 1/2 + 1i/2, -1, 0, 0, 0, 0, 0, 0, 0, 0]
[ 0, 0, 0, 0, 1, -141/100, 1, 141/100, 0, 0, 0, 0]
[ 0, 0, 0, 0, -141/100, -1, -141/100, -1, 0, 0, 0, 0]
[ 0, 0, 0, 0, 1, -141/100, 1, 141/100, 0, 0, 0, 0]
[ 0, 0, 0, 0, 141/100, -1, 141/100, -1, 0, 0, 0, 0]
[ 0, 0, 0, 0, 0, 0, 0, 0, -3/2, 1/2 - 1i/2, -1i/2, 0]
[ 0, 0, 0, 0, 0, 0, 0, 0, 1/2 + 1i/2, -1, 1/2 - 1i/2, 0]
[ 0, 0, 0, 0, 0, 0, 0, 0, 1i/2, 1/2 + 1i/2, -3/2, 0]
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2]

Christine Tobler on 23 Oct 2020
I don't think it's possible: Looking at the eigenvalues and eigenvectors of B,
>> diag(D)
ans =
0.0000 + 2.0000i
0.0000 + 1.0000i
0.0000 + 1.0000i
0.0000 + 1.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 - 1.0000i
0.0000 - 1.0000i
0.0000 - 1.0000i
0.0000 - 2.0000i
>> U(:, 1)
ans =
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.5000i
0.5000 + 0.0000i
0.0000 + 0.0000i
0.5000 + 0.0000i
0.0000 - 0.5000i
0.0000 + 0.0000i
There is just one eigenvalue 2i, and its eigenvector contains both purely real and purely imaginary elements. Since the eigenvalue is not multiple, we can't choose a different basis of the eigenspace, and no scaling will turn a vector real unless its already a real vector with all elements just rotated by the same imaginary number.
But maybe you could go the opposite direction, compute the eigendecomposition of the real symmetric matrix K, and apply those eigenvector matrices to B? That would leave the matrix B real and skew-symmetric.

R2020b

### Community Treasure Hunt

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

Start Hunting!

Translated by