problem of Accuracy in vectors

3 views (last 30 days)
Kobi
Kobi on 7 Apr 2014
Answered: José-Luis on 7 Apr 2014
when i try to create a vector using (for example):
x=0:0.5000000001:3
x =
0 0.5000 1.0000 1.5000 2.0000 2.5000
>>
i get the resault above i wanted the vector to be until 3 but it's until 2.500000
to solve this problem i have not so ideal solution (i will explain why)
>> y=linspace(0,3,12)
y =
Columns 1 through 10
0 0.2727 0.5455 0.8182 1.0909 1.3636 1.6364 1.9091 2.1818 2.4545
Columns 11 through 12
2.7273 3.0000
>>
this function "linspace" is not linear function, the space between each and every array is different and you can see that by doint diff(y) and to see that the difference between the arrays is different
is there another solution for my problem (other function, other method....)? and why in the first method the vector is up to 2.5 and not 3?

Answers (2)

Jan
Jan on 7 Apr 2014
Edited: Jan on 7 Apr 2014
Look at the documentation of the colon operator: 0:0.5000000001:3 creates:
[0, 0.5000000001, 1.0000000002, 1.5000000003, 2.0000000004, 2.5000000005]
The next element would be 3.0000000006, which is obviously greater than 3 and in consequence not included in the output.
There are very tiny difference between the elements of diff(y), because the numbers are represented with a limited precision only. You cannot store an arbitrary number of digits in a limited chunk of memory. See FAQ: Why is 0.3-0.2-0.1 not 0

José-Luis
José-Luis on 7 Apr 2014
Please try:
0:2:3
You will see that it will not return 3. That is because the behavior of the colon operator is such that it will not include the upper limit if it is not equal to the lower limit plus a multiple of the interval, give or take numerical precision.
For instance:
0:0.50000000000000000000000000000001:3
would work as you expect.
As for linspace(), I am afraid I don't undertand what you mean. It IS linear. If you do
diff(linspace(0,3,12))
you will see that the values you get, while very similar, are not identical, and that is due to the numerical precision of double values. Please look at:
You should always be careful when comparing doubles.

Products

Community Treasure Hunt

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

Start Hunting!