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

1 Ansicht (letzte 30 Tage)
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

Akzeptierte Antwort

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

Weitere Antworten (1)

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

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by