matlab中的eps功能

2021-07-05 22:16:48 字數 3786 閱讀 5054

最近在學習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> 

>> 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 的用法

原文 eps 1 我們看一下下面的例子就明白了 首先是我們看一下eps 1 的值,還是eps的預設值。然後我們比較1 eps 1 是否與1相等,結果返回的是0 在matlab中0即為false,1為true,所以我們知道,1 eps 1 與1並不相等,也就是說,matlab能區分這樣的兩個數,包括1...

eps在MATLAB中的作用

eps在matlab中的作用 eps是乙個函式。當沒有引數時預設引數是1.返回的是該引數的精度。也就是說單個的eps實際上是eps 1 表示的是1的精度。這裡要說一下精度的概念。浮點數所能表示的數值範圍是很大的,但是浮點數不是無限的,連續的和稠密的 而是有限的,離散的和稀疏的,而且每個數的精度都不一...

MATLAB中的eps的詳細解釋及用法

1 首先,eps是乙個函式,它表示的是乙個數可以分辨的最小精度。預設時它表示1到它下乙個浮點數之間的距離的一半,而正好等於最大小於1的浮點數到最小大於1的浮點數之間的距離。eps 2.2204e 16 下面是eps的預設精度。注 以下演示環境是在matlab r2018a的編譯環境中進行的。下面對e...