How to get orthogonal eigenvectors for degenerate normal matrix?
Show older comments
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)
Christine Tobler
on 12 May 2017
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.
Matt J
on 26 Apr 2017
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
Zekun Zhuang
on 26 Apr 2017
Matt J
on 26 Apr 2017
I think eig() should always return orthogonal eigenvectors for a Hermitian matrix. If you have a counter-example, please show it.
Zekun Zhuang
on 27 Apr 2017
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.
Zekun Zhuang
on 27 Apr 2017
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.
Categories
Find more on Linear Algebra in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!