How to generate a vector with the required values
이전 댓글 표시
Dear all, I just noticed that if I create a vector like x=[.1:.1:.9] the result apparently is the same as creating it manually as x=[.1 .2 .3 .4 .5 .6 .7 .8 .9]; but it is not like that!
For example
>> x=[.1:.1:.9]
x =
0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000
>> x(3)==.3
ans =
0
how can you explain that? And how can I be sure to create vectors with the required values???
FIY I'm using Matlab 2009b on a Unix environment. Cheers, -Luca
댓글 수: 1
Jan
2011년 2월 15일
Should we vote this question, because it is asked very frequently? Or should we not vote it, because the best answer would be not to ask the question at all? (sorry for this illogical formulation)
채택된 답변
추가 답변 (3개)
Jan
2011년 2월 15일
2 개 추천
Look at this frequently cited article:
Bruno Luong
2011년 2월 15일
As Davide wrote, colon() operator will build the array by increment of the step (actually half incremental from both ends), and numerical errors will accumulate.
A more accurate way is using linspace(), which is computed by integer multiplication of the step.
a = linspace(0,1,11)
a == [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]
For what you want, probably the only way to get the exact value as command line is
a = eval('[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]')
댓글 수: 3
Jos (10584)
2011년 2월 15일
Hmm, why use the eval ...
a = eval('[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]')
b = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]
isequal(a,b)
Bruno Luong
2011년 2월 15일
Right Jos, I should write
eval(['[ ' sprintf('0.%d ',0:10) ']'])
Jan
2011년 2월 15일
I assume the suggested EVAL method will increase the OP's misunderstanding of using floating point numbers in Matlab.
Aneeza Aneeza
2021년 3월 1일
0 개 추천
Create a table of conversions from m/h to ft/s. Start the mi/h column at 0 and end it at
100 mi/hr. Print 15 values in your table. (Note: 22 ft/s = 15 m/h)
카테고리
도움말 센터 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!