Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算误差的Matlab解释_Matlab - Fatal编程技术网

计算误差的Matlab解释

计算误差的Matlab解释,matlab,Matlab,在前一个问题中,有一个等式: e = 1 – 3*((4/3) – 1) 而不是0,而是: e =2.2204e-16 我理解为什么会发生这种情况,因为4/3无法准确表示 4/3的最接近表示为: 1.3333333333333332593184650249895639717578887939453125 并且在必要的操作之后,获得e=2.2204e-16 现在,我很难理解这些方程中涉及e的奇怪行为: (一) 这里我们期望b等于c,但事实并非如此。我知道操作顺序和错误有点可疑,但我不明白为

在前一个问题中,有一个等式:

e = 1 – 3*((4/3) – 1) 
而不是
0
,而是:

e =2.2204e-16
我理解为什么会发生这种情况,因为
4/3
无法准确表示

4/3
的最接近表示为:

1.3333333333333332593184650249895639717578887939453125
并且在必要的操作之后,获得
e=2.2204e-16

现在,我很难理解这些方程中涉及
e
的奇怪行为:

(一)

这里我们期望
b
等于
c
,但事实并非如此。我知道操作顺序和错误有点可疑,但我不明白为什么
b
不等于
c

(二)


现在,我怀疑减法运算完成后,由于操作数几乎相等,所以会出现某种相消。但我还是有点困惑,希望能有详细的解释。谢谢。

即使在MATLAB中使用浮点数,在比较这些值时也不准确。如果需要特定的精度水平,则应使用近似相等的断言、使用公差(相对误差、绝对误差等)等


检查以及。在MATLAB中,通过函数可以实现相对误差精度。

我相信关键是。例如,
sqrt(1+1e-16)==1
。使用泰勒级数,
sqrt(1+1e-16)~~1+0.5e-16
,但是
eps(1)
2e-16
更重要。因此,
sqrt(1+1e-16)
的结果被取整回精确的
1
。阅读浮点数学的时间到了:
 b = 1e-16 + 1 - 1e-16; 

 c = 1e-16 - 1e-16 + 1;
sqrt(1e-16 + 1) - 1;
ans=0