Problem finding the index?
12 views (last 30 days)
I am facing a surprising problem. I assigned a range of values for a variable t=-10:0.2:89.8. When I am finding index of 30 by doing find(t==30) its printing 201.
But while finding the index of 40 by find(t==40) its printing 1x0 empty double row vector instead of 251. Why this problem is occuring?
ME on 6 Dec 2019
The problem is the precision which which your machine is able to store numbers. You are asking MATLAb to find an exact match to t=40, but when you open up the variable browser (or whatever it is called) and double click on the t = 40 box then you can see that it is actually stored as t = 39.999999999999990.
You'd probably be better off trying to find a value extremely close to t = 40 as this will find the right index.
More Answers (3)
Ok, a problem of precision, I will edit the previous answer to have the complete solution
Edited: Constantino Carlos Reyes-Aldasoro on 6 Dec 2019
Hello, you have a very subtle problem, and it is that you do not have a value of 40 in your matrix. If you see the value of location 251 like this:
>> t (251)
you see that is not the same as when you try 201
>> t (201)
Notice all the zeros after the decimal point in 251? To probe further you can subtract 40 from the value stored in 251:
>> t (251)-40
so you will have that the value stored there is NOT 40 but 40.0000000 ... 0000015. You can fix this easily by changing the definition of t like this
and then try again
Alternatively, you can change the precision of t from the beginning like this
by doing the rounding you have eliminated all the 0.0000000 parts of the vector, then you divide and return to your original precision and then it should work fine: