# Why do logical operators do not work with the eigenvalues of this matrix?

1 view (last 30 days)
Vipul Kumar on 30 Apr 2021
Answered: Steven Lord on 30 Apr 2021
I am trying to find index of eigenvalues of a matrix which are equal to 1. But for some reason the '==' or 'ismember' don't work to recognize that. Can someone look at this code and suggest, what is wrong with this?
TM = [0.1,0.2,0.7; 0.5,0.2,0.3;0.1,0.1,0.8];
[V,D] = eig(TM');
V
D
vec = sum(D);
for n1 = 1:length(vec)
if (vec(n1) == 1)
index_for_pop = n1;
end
end
index_for_pop
===output
V =
-0.2022 -0.8100 -0.4938
-0.1711 0.3162 -0.3162
-0.9643 0.4938 0.8100
D =
1.0000 0 0
0 -0.1562 0
0 0 0.2562
Undefined function or variable 'index_for_pop'.
Error in trial2 (line 14)
index_for_pop

Christine Tobler on 30 Apr 2021
There's a small round-off error on the eigenvalue 1:
>> TM = [0.1,0.2,0.7; 0.5,0.2,0.3;0.1,0.1,0.8];
[V,D] = eig(TM', 'vector');
D(1)
ans =
1.0000
>> D(1) - 1
ans =
4.4409e-16
It's usually not a good idea in numerical computations to do an "==" type comparison, better to use abs(D(1) - 1) < 1e-14, for example.
Vipul Kumar on 30 Apr 2021
Thanks a lot. That solves it for me. :)

Steven Lord on 30 Apr 2021
The eigenvalue is not exactly equal to 1. It is close enough to 1 that it is displayed as 1 in the default display format.
You might want to call eig with the 'vector' input so it returns your eigenvalues as a vector rather than a diagonal matrix.
Use ismembertol or the technique shown in the last block of code in this Answers post.