您的位置:首页 > 编程语言 > MATLAB

matlab中的eps功能

2015-10-16 17:55 477 查看
最近在学习MATLAB,中间在做矩阵的除法时,发现后面加了个eps,按照以往经验,不加eps就可以了,感觉很疑惑,所以查询了一下。

使用help eps得到了:

EPS  Spacing of floating point numbers.

    D = EPS(X), is the positive distance from ABS(X) to the next larger in

    magnitude floating point number of the same precision as X.

    X may be either double precision or single precision.

    For all X, EPS(X) = EPS(-X) = EPS(ABS(X)).

 

    EPS, with no arguments, is the distance from 1.0 to the next larger double

    precision number, that is EPS = 2^(-52).

 

也就是eps表征的是浮点数的间隔值

EPS(X)表示的是 ABS(X)到下一个更大的浮点数之间的间隔(因为浮点数是间断的,不连续)。而且EPS(X) = EPS(-X) = EPS(ABS(X)),都是X的绝对值到下一个浮点数的间隔长度。

不带参数的 EPS,是从1开始到下一个比原值大的浮点数与原值的距离。我的理解是这是一个随原值变化的精度。比如a+eps,如果a为浮点数,则a+eps==a;如果a在两个浮点数之间,则取比a大的那个浮点数替代。a+eps>a.(如果不加eps,可能结果就是通过四舍五入的原则选择离a近的浮点数)。

我设置以下函数:

[a,b]=meshgrid(-2:.5:2);

c=sqrt(a.^2+b.^2)+eps;

d=sqrt(a.^2+b.^2);

e=find(c~=d);

f=[c(e(1)),c(e(2)),c(e(3)),c(e(4)),c(e(5)),c(e(6)),c(e(7)),c(e(8)),c(e(9))];

g=[d(e(1)),d(e(2)),d(e(3)),d(e(4)),d(e(5)),d(e(6)),d(e(7)),d(e(8)),d(e(9))];

h=[f;g]

得到:h =

    2.8284    2.0616    2.0616    2.8284    2.1213    1.8028    1.5811    1.5000    1.5811

    2.8284    2.0616    2.0616    2.8284    2.1213    1.8028    1.5811    1.5000    1.5811

可以看到,在寻找的c与d的不同元素的结果却是一样的数值。但是:

j=c<d

j =

     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0

>> 

>> i=c>d

i =

     1     0     0     1     0     1     0     0     1

     0     1     1     1     1     1     1     1     0

     0     1     1     1     1     1     1     1     0

     1     1     1     1     1     1     1     1     1

     0     1     1     1     1     1     1     1     0

     1     1     1     1     1     1     1     1     1

     0     1     1     1     1     1     1     1     0

     0     1     1     1     1     1     1     1     0

     1     0     0     1     0     1     0     0     1

我们可以发现,c一定大于或等于d。虽然呈现的结果上看不出来,但是计算系统却能辨别出来。所以a+eps>=a.所以a+eps是取了离a最近的最大的那个浮点数。这也告诉我们

,眼见的不一定是事实。附上c和d,可以对比下(数值上都一样):

c =

    2.8284    2.5000    2.2361    2.0616    2.0000    2.0616    2.2361    2.5000    2.8284

    2.5000    2.1213    1.8028    1.5811    1.5000    1.5811    1.8028    2.1213    2.5000

    2.2361    1.8028    1.4142    1.1180    1.0000    1.1180    1.4142    1.8028    2.2361

    2.0616    1.5811    1.1180    0.7071    0.5000    0.7071    1.1180    1.5811    2.0616

    2.0000    1.5000    1.0000    0.5000    0.0000    0.5000    1.0000    1.5000    2.0000

    2.0616    1.5811    1.1180    0.7071    0.5000    0.7071    1.1180    1.5811    2.0616

    2.2361    1.8028    1.4142    1.1180    1.0000    1.1180    1.4142    1.8028    2.2361

    2.5000    2.1213    1.8028    1.5811    1.5000    1.5811    1.8028    2.1213    2.5000

    2.8284    2.5000    2.2361    2.0616    2.0000    2.0616    2.2361    2.5000    2.8284

>> d

d =

    2.8284    2.5000    2.2361    2.0616    2.0000    2.0616    2.2361    2.5000    2.8284

    2.5000    2.1213    1.8028    1.5811    1.5000    1.5811    1.8028    2.1213    2.5000

    2.2361    1.8028    1.4142    1.1180    1.0000    1.1180    1.4142    1.8028    2.2361

    2.0616    1.5811    1.1180    0.7071    0.5000    0.7071    1.1180    1.5811    2.0616

    2.0000    1.5000    1.0000    0.5000         0    0.5000    1.0000    1.5000    2.0000

    2.0616    1.5811    1.1180    0.7071    0.5000    0.7071    1.1180    1.5811    2.0616

    2.2361    1.8028    1.4142    1.1180    1.0000    1.1180    1.4142    1.8028    2.2361

    2.5000    2.1213    1.8028    1.5811    1.5000    1.5811    1.8028    2.1213    2.5000

    2.8284    2.5000    2.2361    2.0616    2.0000    2.0616    2.2361    2.5000    2.8284
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab eps