필터 지우기
필터 지우기

How to identify repeated eigenvalues?

조회 수: 4 (최근 30일)
Oliver
Oliver 2016년 10월 27일
댓글: Star Strider 2016년 10월 28일
I have a relatively large matrix (1771 x 1771), representing the laplacian of a graph. Looking at the eigenvalues of this matrix, I suspect that the multiplicity of some of the eigenvalues is greater than 1. However, because they are numerically computed all of the eigenvalues are numerically distinct. To make matters worse, the elements of this matrix are very small (on the order of eps). How can I determine if two (or more) numerically distinct eigenvalues are actually equivalent (i.e. how close do they have to be to be considered identical)?
I have attached a .mat file with the matrix in question. I compute the eigevalues and eigenvectors using
[U,lambda] = eig(full(L));
I am suspicious that the second and third (and maybe more) eigenvalues are actually degenerate, even though they are numerically distinct, but I don't know how to test this. Any suggestions?

답변 (1개)

Star Strider
Star Strider 2016년 10월 28일
I would use the uniquetol function if you have R2015a or later. you have to decide the tolerance you want to use to determine the difference between them. I would request all 3 outputs, so you can keep track of the positions of the unique values in the original vector (using the third output).
  댓글 수: 2
Oliver
Oliver 2016년 10월 28일
@Star Strider: Thanks for the suggestion, I was unaware of this function. However, the fundamental issue is selecting the appropriate tolerance to determine whether two eigenvalues are the same or not, which I don't know a priori (the elements of the matrix I am considering vary by 7 orders of magnitude, so its not obvious how close is close enough). Is there some property of eigenvalues/eigenvectors that could be used to test whether two eigenvalues are equivalent (i.e. degenerate), even if they are numerically distinct?
Star Strider
Star Strider 2016년 10월 28일
I’m not certain what to suggest with respect to the tolerances. The only help with that I can offer is a way to visualize the eigenvalue magnitudes and the ‘gradient’ of the eigenvalue vector to determine the differences between them. (I used the gradient function because it produces a result the same size as the argument, making it easier to index to the original vector if you need to.) That may help you decide what you want to define as the tolerance.
This is the only way I can think of to approach this problem.
The Code:
in = load('Oliver LaplacianMaybeHasMultiplicities.mat');
Lv = in.Lv;
[U,lambda] = eig(full(Lv));
figure(1)
spy(Lv)
grid
title('Matrix Pattern')
Ls = eigs(Lv, size(Lv,1)-1);
figure(2)
semilogy(Ls)
grid
title('Eigenvalue Magnitudes')
dLs = gradient(Ls);
figure(3)
semilogy(dLs)
grid
title('Gradient (‘Derivative’) of Eigenvalues Vector')
There’s nothing special about my code. I offer it as the way I would approach this. Experiment with it to get the information you need from it.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Linear Algebra에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by