what's wrong with 'smooth' and 'find' commands in this code?
1 view (last 30 days)
Show older comments
x = [0 0 0 1 1 1 0 1 0 0 1 1 1 0 0 0 0];
y = smooth(x,5);
find(y(:) == 0.6)
ans = Empty matrix: 0-by-1
Running above script gives empty matrix though definitely 0.6 elements exit. What have I done wrong?
0 Comments
Accepted Answer
Grzegorz Knor
on 31 Jan 2012
Look at result of this line:
y- round(y*10)/10
In vector y there is no exact 0.6 value.
Try this code:
x = [0 0 0 1 1 1 0 1 0 0 1 1 1 0 0 0 0];
y = smooth(x,5);
find(abs(y(:)-0.6)<eps)
2 Comments
Grzegorz Knor
on 31 Jan 2012
It is 0.6, because difference between result and exact value is 1.11022302462516e-16 (on my PC) and it is smaller than floating-point relative accuracy 2.22044604925031e-16 (on my PC).
Compare with:
format long
x = single([0 0 0 1 1 1 0 1 0 0 1 1 1 0 0 0 0])
y = smooth(x,5)
More Answers (1)
Jan
on 31 Jan 2012
This is one of the mayn effects of the limited precision of floating point values. See: Answers: Tag=faq6.1.
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!