Asked by Rahul Singh
on 1 May 2015

0 -0.5000 0 0 0 0.5000

0.5000 0 -0.5000 0 0 0

0 0.5000 0 -0.5000 0 0

A = 0 0 0.5000 0 -0.5000 0

0 0 0 0.5000 0 -0.5000

-0.5000 0 0 0 0.5000 0

The above matrix is skew-symmetric. When I use [U E] = eig(A), to find the eigenvectors of the matrix. These eigenvectors must be orthogonal, i.e., U*U' matix must be Identity matrix. However, I am getting U*U' as

0.9855 -0.0000 0.0410 -0.0000 -0.0265 0.0000

-0.0000 0.9590 0.0000 0.0265 -0.0000 0.0145

0.0410 0.0000 0.9735 -0.0000 -0.0145 0.0000

-0.0000 0.0265 -0.0000 1.0145 0.0000 -0.0410

-0.0265 -0.0000 -0.0145 0.0000 1.0410 -0.0000

0.0000 0.0145 0.0000 -0.0410 -0.0000 1.0265

Here we can observe a substantial error. This happens for some other skew-symmetric matrices also. Why this large error is being observed and how do I get correct eigen-decomposition for all skew-symmetric matrices?

Answer by Roger Stafford
on 1 May 2015

Edited by Walter Roberson
on 20 Sep 2018

Accepted Answer

Your matrix A is "defective" , meaning that its eigenvalues are not all distinct. In fact, it has only three distinct eigenvalues. Consequently the space of eigenvectors does not fully span six-dimensional vector space. See the Wikipedia article:

What you are seeing is not an error on Matlab's part. It is a mathematical property of such matrices. You cannot achieve what you call "correct eigen-decomposition" for such matrices.

Roger Stafford
on 2 May 2015

@Rahul: Once the repetition of eigenvalues is recognized, the adjustment can easily be done using matlab's 'orth' function. In the case of your particular A, the first and fourth eigenvalues in diag(E) are equal (on my computer), and similarly for the second and fifth, and for the third and sixth, so the adjustment (in my case) would simply be:

U(:,[1,4]) = orth(U(:,[1,4]));

U(:,[2,5]) = orth(U(:,[2,5]));

U(:,[3,6]) = orth(U(:,[3,6]));

Note that the resulting U, besides being orthonormal, will still constitute a valid set of eigenvectors, even though there is an arbitrary aspect to the result of 'orth'.

The hard part is recognizing such eigenvalue equalities and in fact recognizing matrices that are diagonalizable. There really are matrices that cannot be diagonalized and which are therefore designated as "defective". For these reasons it ought to be Mathworks that carries out such a revision.

However, you can experiment on your own using 'orth' to see how it works. Remember, both the eigenvalues and the eigenvectors will be complex-valued for your skew-symmetric matrices, and in testing the adjusted U'*U you will get tiny imaginary components due to rounding errors.

By the way, in requesting a change, you should probably not refer to the current version as being in "error", since Mathworks up to this point hasn't promised orthonormal eigenvectors for matrices that are other than real and symmetric.

Rahul Singh
on 2 May 2015

@Roger and Star: Thanks a lot.

Lorenzo
on 20 Sep 2018

Sign in to comment.

Answer by Rahul Singh
on 2 May 2015

Roger Stafford
on 2 May 2015

Rahul Singh
on 3 May 2015

Are the eigenvector pairs still orthogonal?

Roger Stafford
on 3 May 2015

Sign in to comment.

Answer by Christine Tobler
on 20 Sep 2018

Since, as Lorenzo points out in a comment above, 1i*A is hermitian, you could apply eig to that matrix:

>> [U, D] = eig(1i*A);

>> D = D/1i;

>> norm(U'*U - eye(6))

ans =

1.4373e-15

>> norm(A*U - U*D)

ans =

7.8098e-16

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.