在这个问题中,我正在解决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
请帮帮我
答案 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
。