MATLAB Answers

How can I return real-valued eigenvectors from diagonalization?

조회 수: 1(최근 30일)
Jonah Berean-Dutcher
Jonah Berean-Dutcher 2020년 10월 23일
답변: Christine Tobler 2020년 10월 23일
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]

답변(1개)

Christine Tobler
Christine Tobler 2020년 10월 23일
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