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

1 view (last 30 days)
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

Accepted Answer

Christine Tobler
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.

More Answers (1)

Steven Lord
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.

Products

Community Treasure Hunt

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

Start Hunting!