matlab中的数值计算问题

时间:2014-01-26 06:13:29

标签: matlab numerical floating-point-precision

在这个问题中,我正在解决matlab中的数值计算问题,并希望获得如何在将来避免这些问题/错误的经验

例如,让我们考虑以下简单代码

t = 0.4 + 0.1 - 0.5

t =

     0

它工作正常,但

u = 0.4 - 0.5 + 0.1

u =

   2.7756e-17

当然记住它也是0,但为什么不在第一次计算得到相同的结果?或者有什么区别?还请看

v = (sin(2*pi) = = sin(4*pi)) 

v = (sin(2*pi)==sin(4*pi))

v =

     0

它表明正弦函数不是周期性的,所以在这种情况下一般建议是什么?介绍一些epsilon?比如

V=((sin(2*pi)-sin(4*pi))<eps)

V =

     0

EPS=0.000000000000001

EPS =

   1.0000e-15

>> V=((sin(2*pi)-sin(4*pi))<EPS)

V =

     1

请帮帮我

1 个答案:

答案 0 :(得分:1)

获得这些结果是正常的,因为Matlab中的浮点相对精度是

eps('double')

ans =

   2.2204e-16

对于V=((sin(2*pi)-sin(4*pi))<eps),因为

sin(2*pi)-sin(4*pi)

ans =

   2.4493e-16

大于eps('double'),因此其结果为V=0


对于V=((sin(2*pi)-sin(4*pi))<EPS),因为EPS>2.4493e-16,因此其结果为V=1