in the below mentioned code, i get an error in finding some elements (not in all) : 0×1 empty double column vector
11 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
ravi shukla
am 15 Aug. 2023
Bearbeitet: Torsten
am 15 Aug. 2023
m=41;
n=51;
dx=0.0500;
dy=0.0500;
for i=1:m
for j=1:n
x(i,1)=(i-1)*dx;
y(j,1)=(j-1)*dy;
end
end
k=find(x==0.3)
0 Kommentare
Akzeptierte Antwort
Steven Lord
am 15 Aug. 2023
This behavior is a consequence of floating point arithmetic. See this Answers post and the "Avoiding Common Problems with Floating-Point Arithmetic" section of this documentation page for more information.
If you are using the == operator to attempt to locate a floating-point number in an array, instead subtract the number you're trying to find from the numbers in the array and locate those positions where the difference is smaller than some tolerance or use the ismembertol function.
x = 0:0.1:1
It appears that x contains the value 0.3, but it does not contain exactly 0.3.
checkWithExactEquality = x == 0.3
It does contain a value that is extremely close to 0.3, however.
tolerance = 1e-15;
checkWithTolerance = abs(x-0.3) < tolerance
whichValueTolerance = x(checkWithTolerance)
How far away from 0.3 is the value we found using a tolerance?
howDifferent = whichValueTolerance - 0.3
To do the same with ismembertol:
checkWithIsmembertol = ismembertol(x, 0.3, tolerance)
whichValueIsmembertol = x(checkWithIsmembertol)
The ismembertol function found the same value that the check with a tolerance did.
0 Kommentare
Weitere Antworten (1)
Torsten
am 15 Aug. 2023
Verschoben: Torsten
am 15 Aug. 2023
k = find(abs(x-0.3)==min(abs(x-0.3)))
2 Kommentare
Torsten
am 15 Aug. 2023
Bearbeitet: Torsten
am 15 Aug. 2023
Asking for strict equality of expressions is dangerous because of floating point arithmetic. See @Steven Lord 's answer for a more detailed explanation.
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!