问一个比较傻但是我实在搞不清的问题
x=0:0.1:1;y=-0.44.*(x==0)+1.97.*(x==0.1)+3.28.*(x==0.2)+6.16.*(x==0.3)+7.08.*(x==0.4)+7.34.*(x==0.5)+7.66.*(x==0.6)+9.56.*(x==0.7)+9.48.*(x==0.8)+9.30.*(x==0.9)+11.2.*(x==1);
Plot(x,y,‘bo’)
我就是想知道,为什么我每次画出来的图形在x=0.3的地方总是零但是其他地方都正常呢???
高人指教,万分感谢!!! LZ看看a=(x==0), b=(x==0.3)的结果!
好奇, 为何不直接使用
y=[-0.44,1.97,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];
[ 本帖最后由 ChaChing 于 2009-7-4 19:04 编辑 ]
回复 沙发 ChaChing 的帖子
为什么b是全零啊?x明明有一个0.3啊???回复 板凳 波波球 的帖子
详细原因, 个人亦很有兴趣知道!?但最近较忙些, 实在没空试或搜资料!
基本上个人猜测是精确度的问题! 待高人路过 感到奇怪,==0.3全零
>> x=0:0.1:1;
>> x==.1
ans =
0 1 0 0 0 0 0 0 0 0 0
>> x==.3
ans =
0 0 0 0 0 0 0 0 0 0 0
>> x==.4
ans =
0 0 0 0 1 0 0 0 0 0 0
[ 本帖最后由 friendchj 于 2009-7-6 18:23 编辑 ]
回复 5楼 friendchj 的帖子
x=0:0.1:1;>> x==.1
ans =
0 1 0 0 0 0 0 0 0 0 0
>>x==.3
ans =
0 0 0 0 0 0 0 0 0 0 0
>>x==.4
ans =
0 0 0 0 1 0 0 0 0 0 0
>> x==.2
ans =
0 0 1 0 0 0 0 0 0 0 0
>> x==.5
ans =
0 0 0 0 0 1 0 0 0 0 0
>> x==.6
ans =
0 0 0 0 0 0 1 0 0 0 0
>> x==.7
ans =
0 0 0 0 0 0 0 1 0 0 0
>> x==.8
ans =
0 0 0 0 0 0 0 0 1 0 0
>> x==.9
ans =
0 0 0 0 0 0 0 0 0 1 0
>> x==.3
ans =
0 0 0 0 0 0 0 0 0 0 0
>> abcd=x(4)-.3
abcd =
5.5511e-017
>>eps
ans =
2.2204e-016
>> abcd=x(5)-.4
abcd =
0
>> abcd=x(6)-.5
abcd =
0
我在你的基础上又多尝试了一下,得到上面的结果,发现abcd=x(4)-.3 对应的结果不是0,而是小于计算精度的一个很小的小数,而其它的都没问题,的确是有些奇怪,不过我想从数值计算的角度来说,拿两个小数点后非0的实数采用==进行对比,本身就是不科学的,因为在处理过程中汇引入截断误差,所以两个非整的实数尽管我们认为是一致的,但是在计算机内的存储可能会存在些微差别。比较理想的方法就是abs(x-0.3)<eps这样的形式,不会出错。
>>abs(x-0.3)<eps
ans =
0 0 0 1 0 0 0 0 0 0 0
页:
[1]