greenheart 发表于 2009-7-4 18:23

问一个比较傻但是我实在搞不清的问题

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的地方总是零但是其他地方都正常呢???

高人指教,万分感谢!!!

ChaChing 发表于 2009-7-4 19:01

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 编辑 ]

波波球 发表于 2009-7-6 12:10

回复 沙发 ChaChing 的帖子

为什么b是全零啊?x明明有一个0.3啊???

ChaChing 发表于 2009-7-6 17:22

回复 板凳 波波球 的帖子

详细原因, 个人亦很有兴趣知道!?
但最近较忙些, 实在没空试或搜资料!
基本上个人猜测是精确度的问题! 待高人路过

friendchj 发表于 2009-7-6 18:15

感到奇怪,==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 编辑 ]

心灯 发表于 2009-7-6 20:42

回复 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]
查看完整版本: 问一个比较傻但是我实在搞不清的问题