How to get orthogonal eigenvectors for degenerate normal matrix?

I know that Matlab can guarantee the eigenvectors of a real symmetric matrix are orthogonal. In fact, for a general normal matrix which has degenerate eigenvalues, we can always find a set of orthogonal eigenvectors as well. But as I tried, Matlab usually just give me eigenvectors and they are not necessarily orthogonal. Is there any function that can give orthogonal eigenvectors, or is there some fancy alternative way to do it? Thanks!

Answers (2)

I believe the Schur decomposition returns what you need. Here's an example
% Construct a normal matrix
U = orth(randn(100));
A = U*diag(randi(5, 100, 1))*U';
% Compute Schur decomposition
[V, T] = schur(A);
% Schur vectors are orthogonal
norm(V'*V - eye(100)) % only round-off error
% Matrix T is diagonal up to numerical error
norm(T - diag(diag(T))) % only round-off error: T is nearly diagonal
Therefore, if matrix A is normal, diag(T) are its eigenvalues, and V are its eigenvectors.
I think the eigenvalues of a normal matrix A are the same as A'*A, so I think you could get orthogonal eigenvectors just by doing
[V,~]=eig(A'*A);

7 Comments

Not exactly, if the normal matrix has degenerate eigenvalues, this function usually gives me non-orthogonal eigenvectors.
I think eig() should always return orthogonal eigenvectors for a Hermitian matrix. If you have a counter-example, please show it.
My matrix is a general normal matrix, it is neither real symmetric nor Hermitian. I am sorry that I cannot show it because it is a very large matrix.
My matrix is a general normal matrix, it is neither real symmetric nor Hermitian.
It looks like you didn't read my Answer carefully enough. My recommendation was to compute the eigenvectors of A'*A which is Hermitian for any A, and has the same eigenvectors as A when A is normal.
I am sorry that I cannot show it because it is a very large matrix.
If it is sparse, you could attach it in a .mat file.
Alright, I understand what you mean now. But even though A'*A can give the same set of eigenvectors, it doesn't give same eigenvalues and guarantee its eigenvectors are also A's. For example, if eigenvalues of A is i and -i, the eigenvalues of A*A' are 1 1, and generally any orthogonal vectors are eigenvectors for A*A' but not for A.
OK. Well, I wonder if the QR decomposition would give it to you
[V,E]=eig(A,'vector');
[V,~]=qr(V);
but I cannot prove it.
I think I've found a way to prove that the qr decomposition of the eigenvector matrix [Q,R]=qr(V) will always give orthogonal eigenvectors Q of a normal matrix A. The proof assumes that the software for [V,D]=eig(A) will always return a non-singular matrix V when A is a normal matrix. Since a normal matrix has eigenvectors spanning all of R^n, I don't know why this wouldn't be the case. If true, it means that the upper-triangular matrix R in V=Q*R will also be non-singular.
Using the eigendecomposition equation for A,
A*V=V*D
and incorporating the QR-dceomposition of V leads to,
Q'*A*Q=R*D*inv(R)
The right hand side of this equation is triangular and the left hand side is normal. Both sides must therefore equal a diagonal matrix, T. Hence,
A=Q*T*Q'
and so Q are the orthogonal eigenvectors of A.

Sign in to comment.

Categories

Find more on Linear Algebra in Help Center and File Exchange

Asked:

on 26 Apr 2017

Edited:

on 14 May 2017

Community Treasure Hunt

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

Start Hunting!